Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x wxPython应用程序未退出systray图标左键单击_Python 3.x_Wxpython - Fatal编程技术网

Python 3.x wxPython应用程序未退出systray图标左键单击

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

当我在系统托盘中左键单击我的图标时,它不会退出应用程序-我可以看到它确实通过了该功能,但当我设置断点时,如果我从弹出菜单中单击退出,则程序会按预期退出(运行相同的功能),为什么

应该关闭应用程序的是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_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
可能不是您想象的那样。它在完成当前和挂起的事件处理程序后调用指定的函数。它可能是
现在
任何时候