我在python中编写简单的应用程序,我想用PyGtk编写一个菜单。问题是在“连接”菜单项下,我想要一个可在程序运行期间更改的可用设备列表。到目前为止,我创建菜单项的代码如下:
import gtk
import gobject
class Foo(object):
def __init__(self):
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
gobject.timeout_add(2000, self.AddNewDevice_TEST)
table = gtk.Table(2,1,False)
window.add(table)
menubar = gtk.MenuBar()
self.connectMenu = gtk.Menu()
connectItem = gtk.MenuItem("Connect")
connectItem.set_submenu(self.connectMenu)
dev1 = gtk.MenuItem("device1")
dev1.connect("activate", self.connectToDev)
self.connectMenu.append(dev1)
menubar.append(connectItem)
table.attach(menubar, 0,1,0,1)
window.show_all()
def connectToDev(self, device):
pass
def AddNewDevice_TEST(self):
dev = gtk.MenuItem("device")
dev.connect("activate", self.connectToDev)
self.connectMenu.append(dev)
if __name__=='__main__':
gui = Foo()
gtk.main()
问题是,当我的系统中出现新设备或它已断开连接时,我想将其添加或从“连接”下的列表中删除。 我可以在菜单中编辑设备列表,但在调用gtk.main()后,我无法再进行更改。有没有办法在运行时这样做?
答案 0 :(得分:0)
您可以在运行时在其他线程中更改菜单项,例如GObject.idle_add(self.connectMenu.remove, dev1)
或GObject.idle_add(self.connectMenu.append, dev1)
。 GNOME Developer Documentation中为GtkMenuShell提及的方法可能会有所帮助。
请不要忘记像对此question的回答中所述,在MenuItems上调用show()
。