可能最简单的方法是将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
模块:
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工具包的问题是它们的主循环可能会相互干扰。您可能不得不使用多处理模块而不是线程模块来解决这个问题。我不太确定。但是这应该让你开始。
谢谢您提出的解决方案。此代码成功加载Tkinter,但是当选择“Wx”按钮时,程序在Mac上使用Tcl_ServiceModelHook崩溃:Notifier未初始化中止陷阱:6错误。我尝试了多处理来调用wxpython模块,但得到以下警告:该程序需要访问屏幕。 请使用python的Framework版本运行,并且只有当您在Mac的主显示器上登录到 时才运行。 – nateS
我没有一个Mac可以用来测试。这在我的Xubuntu盒子上工作得很好。我认为框架构建错误可能来自wxPython。我认为某些版本的wxPython没有它或类似的东西就无法工作。 –