2010-06-24 1 views
0

Использование wxPython (я совершенно новичок в этом), я создал значок панели задач на основе демонстрационного кода wxPython. Меню значка открывается по правой кнопке значка на панели задач. Однако я хотел бы, чтобы он делал что-то конкретное и по левому клику.Значки значков на панели задач wxPython не работают должным образом

Я попытался реализации этого путем прослушивания EVT_TASKBAR_CLICK события, как и в 3-й строке Bind в следующем коде:

class TrayIcon(wx.TaskBarIcon): 
    ... 
    def __init__(self, frame): 
     ... 
     self.Bind(wx.EVT_MENU, self.OnLoanUpdate, id=self.TBMENU_UPDATE) 
     self.Bind(wx.EVT_MENU, self.OnTaskBarClose, id=self.TBMENU_CLOSE) 
     self.Bind(wx.EVT_TASKBAR_CLICK, self.DoSomething()) 
     ... 
    def DoSomething(self): 
     print "do it" 

class MainWindow(wx.Frame): 
    def __init__(self, parent, title): 
     wx.Frame.__init__(self, parent, title=title, size=(200, 100)) 
     ... 
     self.tbicon = TrayIcon(self) 
     self.Show(True) 
    ... 

Однако метод DoSomething() выполняется при инициализации моего значка на панели задач. И он не срабатывает по левому (или правому) щелчку, как я ожидал. На самом деле, даже если я использую другие события (например, EVT_CLOSE или EVT_MENU_HIGHLIGHT), поведение будет точно таким же.

Я тестирую это под Windows 7. Что я делаю неправильно?

Edit: Когда я попытался this code и реализовать мероприятия в классе MainWindow, двойной щелчок работал, но я все еще озадачен, когда он не в моем случае.

ответ

2

Попробуйте удалить () в self.DoSomething(). С помощью parens вы связываете wx.EVT_TASKBAR_CLICK с тем, что DoSomething() возвращает, что в данном случае равно None.

+0

Да, это сработало, действительно упустило отсутствие парс в двух других методах Bind()! (Чтобы полностью исправить это, мне пришлось добавить дополнительный параметр evt в мой метод DoSomething) – Rabarberski