Python 3.x wxPython应用程序未退出systray图标左键单击
当我在系统托盘中左键单击我的图标时,它不会退出应用程序-我可以看到它确实通过了该功能,但当我设置断点时,如果我从弹出菜单中单击退出,则程序会按预期退出(运行相同的功能),为什么 应该关闭应用程序的是on exit功能: self.Bind(wx.adv.EVT\u任务栏左下,self.on\u退出) 非常感谢你能提供的任何帮助Python 3.x wxPython应用程序未退出systray图标左键单击,python-3.x,wxpython,Python 3.x,Wxpython,当我在系统托盘中左键单击我的图标时,它不会退出应用程序-我可以看到它确实通过了该功能,但当我设置断点时,如果我从弹出菜单中单击退出,则程序会按预期退出(运行相同的功能),为什么 应该关闭应用程序的是on exit功能: self.Bind(wx.adv.EVT\u任务栏左下,self.on\u退出) 非常感谢你能提供的任何帮助 import wx import wx.adv TRAY_TOOLTIP = 'ShutMeDown' TRAY_ICON = icon.png def create
import wx
import wx.adv
TRAY_TOOLTIP = 'ShutMeDown'
TRAY_ICON = icon.png
def create_menu_item(menu, label, func):
item = wx.MenuItem(menu, -1, label)
menu.Bind(wx.EVT_MENU, func, id=item.GetId())
menu.Append(item)
return item
class TaskBarIcon(wx.adv.TaskBarIcon):
def __init__(self, frame):
self.frame = frame
super(TaskBarIcon, self).__init__()
self.SetIcon(wx.IconFromBitmap(wx.Bitmap(TRAY_ICON)), TRAY_TOOLTIP)
self.Bind(wx.adv.EVT_TASKBAR_LEFT_DOWN, self.on_exit)
def CreatePopupMenu(self):
menu = wx.Menu()
create_menu_item(menu, 'Exit', self.on_exit)
return menu
def on_exit(self, event):
wx.CallAfter(self.Destroy)
self.frame.Close()
class App(wx.App):
def OnInit(self):
frame = wx.Frame(None)
self.SetTopWindow(frame)
TaskBarIcon(frame)
return True
def main():
app = App(False)
app.MainLoop()
if __name__ == '__main__':
main()
尝试将退出时的
更改为:self.frame.Close()self.Destroy(),非常感谢@RolfofSaxony的帮助。你知道为什么它不能与原始代码一起工作吗?请确定?不,但按照逻辑顺序结束,明确而不是含蓄是有意义的。猜测一下,使用wx.CallLater(100,self.Destroy)
可能也会奏效wx.CallAfter
可能不是您想象的那样。它在完成当前和挂起的事件处理程序后调用指定的函数。它可能是现在
到任何时候
。