我正在尝试构建一个包含wxwidgets(仅用于托盘图标)和Tkinter(用于GUI的其余部分)的应用程序。
import wx
import Tkinter
TRAY_TOOLTIP = 'System Tray Icon'
TRAY_ICON = 'icon.png'
frm = False
class TaskBarIcon(wx.TaskBarIcon):
def __init__(self):
super(TaskBarIcon, self).__init__()
self.set_icon(TRAY_ICON)
self.Bind(wx.EVT_TASKBAR_LEFT_DOWN, self.on_left_down)
def set_icon(self, path):
icon = wx.IconFromBitmap(wx.Bitmap(path))
self.SetIcon(icon, TRAY_TOOLTIP)
def on_left_down(self, event):
createframe()
class Frame(Tkinter.Tk):
def __init__(self, parent):
Tkinter.Tk.__init__(self, parent)
self.parent = parent
self.protocol('WM_DELETE_WINDOW', self.closewindow)
self.grid()
def maximize(self):
# supposed to try to hide and bring a window back up
# full code removes the icon from the task bar, so I needed another way to make the window visible again
self.withdraw()
self.deiconify()
def closewindow(self):
self.destroy()
global frm
frm = False
def createframe():
global frm
if isinstance(frm, Tkinter.Tk): # if a window is open, it goes through this if statement
frm.maximize() # and crashes here.
else:
frm = Frame(None)
frm.title('Frame')
frm.mainloop()
def main():
app = wx.App()
TaskBarIcon()
app.MainLoop()
if __name__ == '__main__':
main()
您可以运行此代码并希望看到问题。当您左键单击托盘图标时,会弹出一个窗口,您可以将其关闭并重新打开,但是如果您最小化窗口(或者只是在窗口打开时单击托盘图标),则应用程序崩溃。我认为frm.maximize()
是问题所在,因为我可以毫不费力地从班级内拨打self.maximize()
,但我无法找到解决方案。
当我尝试从frm.destroy()
课程TaskBarIcon
时(frm.quit()
工作正常)我遇到了同样的问题,所以也许这是一个提示?
答案 0 :(得分:1)
您无法在同一程序中组合使用wxpython和tkinter。