我们有两个应用程序,一个使用 Tkinter 界面开发,另一个使用 wxPython 构建。两者都相当复杂。运行完 Tkinter 应用程序后,我希望在选择 Tkinter 应用程序中的按钮后运行 wxPython 应用程序。是否可以切换事件循环,以便 Tkinter 应用程序可以无缝切换到 wxPython GUI?
虽然以下确实有效root.destroy
在 Tkinter 应用程序中:os.system('python wxGUI.py')
最终的程序需要捆绑到多个操作系统的独立应用程序中,因此只有当我创建一个单独的应用程序时,此解决方案才有效py2app
or py2exe
对于 wxPython 应用程序并以这种方式调用它(这并不理想)。
完成此操作的最简单方法可能是将 wxPython 放入单独的线程中,并在您想要调用 wxPython 应用程序时隐藏 Tkinter 应用程序。我刚刚将这个例子组合在一起,它似乎对我有用:
import Tkinter
import wxapp
import wx
from threading import Thread
########################################################################
class WxThread(Thread):
""""""
#----------------------------------------------------------------------
def __init__(self):
""""""
Thread.__init__(self)
self.start()
#----------------------------------------------------------------------
def run(self):
""""""
app = wx.App(False)
frame = wxapp.MyFrame()
app.MainLoop()
########################################################################
class MyApp(object):
""""""
#----------------------------------------------------------------------
def __init__(self, parent):
"""Constructor"""
self.root = parent
self.root.title = "Tkinter App"
self.frame = Tkinter.Frame(parent)
self.frame.pack()
btn = Tkinter.Button(self.frame, text="Open wxPython App",
command=self.run_wx)
btn.pack()
def run_wx(self):
self.root.withdraw()
thread = WxThread()
thread.join()
self.root.deiconify()
#----------------------------------------------------------------------
if __name__ == "__main__":
root = Tkinter.Tk()
root.geometry("800x600")
app = MyApp(root)
root.mainloop()
这就是我在wxapp.py
module:
import wx
########################################################################
class MyFrame(wx.Frame):
""""""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, title="wxPython App")
panel = wx.Panel(self)
self.Show()
您可能需要进行一些实验,因为运行两个不同的 GUI 工具包的主要问题之一是它们的主循环可能会相互干扰。您可能必须使用多处理模块而不是线程模块来解决这个问题。我不太确定。但这无论如何应该让你开始。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)