可能最簡單的方法是將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沒有它或類似的東西就無法工作。 –