gpt4 book ai didi

gtk - Pygtk:从容器中删除小部件并稍后重用

转载 作者:行者123 更新时间:2023-12-04 11:43:56 29 4
gpt4 key购买 nike

我正在使用自定义容器,我需要在其中重新排序小部件,但没有方法可以做到。所以我尝试删除所有小部件并按顺序再次添加它们。

问题是这不能很好地工作,再次添加它们后我看不到小部件,我想发生的事情是当我删除小部件时,它们变得无法实现。

有没有办法删除小部件并在以后重用它?

最佳答案

pygtk docs提供一点见解。

Note that the container will own a reference to widget, and that this may be the last reference held; so removing a widget from its container can cause that widget to be destroyed. If you want to use widget again, you should add a reference to it.



编辑

我只是快速修改了 pygtk 的 Hello World 以在容器中添加/删除/重新排序小部件。这是有效的,因为 button1 是类的成员变量,它永远不会超出范围。

#!/usr/bin/env python

# example helloworld2.py

import pygtk
pygtk.require('2.0')
import gtk

class HelloWorld2:

# Our new improved callback. The data passed to this method
# is printed to stdout.
def callback_remove(self, widget, data):
self.box1.remove(self.button1);

def callback_add(self, widget, data):
self.box1.pack_start(self.button1, True, True, 0)

# another callback
def delete_event(self, widget, event, data=None):
gtk.main_quit()
return False

def __init__(self):
# Create a new window
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)

# This is a new call, which just sets the title of our
# new window to "Hello Buttons!"
self.window.set_title("Hello Buttons!")

# Here we just set a handler for delete_event that immediately
# exits GTK.
self.window.connect("delete_event", self.delete_event)

# Sets the border width of the window.
self.window.set_border_width(10)

# We create a box to pack widgets into. This is described in detail
# in the "packing" section. The box is not really visible, it
# is just used as a tool to arrange widgets.
self.box1 = gtk.HBox(False, 0)

# Put the box into the main window.
self.window.add(self.box1)

# Creates a new button with the label "Button 1".
self.button1 = gtk.Button("Button 1")

# Now when the button is clicked, we call the "callback" method
# with a pointer to "button 1" as its argument
self.button1.connect("clicked", self.callback_remove, "button 1")

# Instead of add(), we pack this button into the invisible
# box, which has been packed into the window.
self.box1.pack_start(self.button1, True, True, 0)

# Always remember this step, this tells GTK that our preparation for
# this button is complete, and it can now be displayed.
self.button1.show()

# Do these same steps again to create a second button
self.button2 = gtk.Button("Button 2")

# Call the same callback method with a different argument,
# passing a pointer to "button 2" instead.
self.button2.connect("clicked", self.callback_add, "button 2")

self.box1.pack_start(self.button2, True, True, 0)

# The order in which we show the buttons is not really important, but I
# recommend showing the window last, so it all pops up at once.
self.button2.show()
self.box1.show()
self.window.show()

def main():
gtk.main()

if __name__ == "__main__":
hello = HelloWorld2()
main()

关于gtk - Pygtk:从容器中删除小部件并稍后重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5614840/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com