是否可以使用gtk在Python中编辑运行时的菜单项?

时间:2017-07-17 11:00:23

标签: python pygtk

我在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()后,我无法再进行更改。有没有办法在运行时这样做?

1 个答案:

答案 0 :(得分:0)

您可以在运行时在其他线程中更改菜单项,例如GObject.idle_add(self.connectMenu.remove, dev1)GObject.idle_add(self.connectMenu.append, dev1)GNOME Developer Documentation中为GtkMenuShell提及的方法可能会有所帮助。

请不要忘记像对此question的回答中所述,在MenuItems上调用show()