gpt4 book ai didi

python - 从类外部调用实例方法会导致崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 17:50:13 26 4
gpt4 key购买 nike

我正在尝试构建一个包含 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() ,但我无法找到解决方案.

当我尝试从 TaskBarIcon 类执行 frm.destroy() 时,我遇到了同样的问题(而 frm.quit() > 工作得很好),所以也许这是一个提示?

最佳答案

您不能将 wxpython 和 tkinter 组合在同一个程序中。

关于python - 从类外部调用实例方法会导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29199871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com