pygtk:如何从popup_menu切换window_state

时间:2011-07-04 15:31:16

标签: python menu gtk pygtk tray

这是我的代码:

def configure_event(self, widget):
    if self.is_hiding:
        self.window.present()
    else:
        self.window.iconify()

def delete_event(self, widget, data=None):
    gtk.main_quit()
    return True

def popup_menu(self):
    self.menu = gtk.Menu()
    self.about = gtk.MenuItem("about")
    if self.is_hiding:
        self.expand = gtk.MenuItem("show")
    else:
        self.expand = gtk.MenuItem("hide")

    self.quit = gtk.MenuItem("quit")

    self.about.connect("activate", self.about_monitor)
    self.expand.connect("activate", self.configure_event)
    self.quit.connect("activate", self.delete_event)

    self.menu.popup(None, None, gtk.status_icon_position_menu, event_button, event_time, self.tray_icon)

    self.menu.append(self.about)
    self.menu.append(self.expand)
    self.menu.append(self.monitor)
    self.menu.append(self.quit)

    self.menu.show_all()

delete_event有效,但configure_event没有。为什么呢?

1 个答案:

答案 0 :(得分:0)

查看两者的签名:

def configure_event(self, widget):
def delete_event(self, widget, data=None):

delete_event有第三个参数data(默认值为None),但configure_event只有两个。

虽然我不知道异常是什么,我打赌这个例外是:

TypeError: configure_event() takes exactly 2 arguments (3 given)

如果将configure_event的签名更改为:

def configure_event(self, widget, data):

会解决它。请注意,我认为None的默认值是不需要的,因为gtk将始终传递内容。