如何在不冻结窗口的情况下组合tkinter和wxpython -python?

时间:2015-11-16 08:38:26

标签: python tkinter wxpython

[问题] 如果我结合tkinter和wxpython然后应用程序。窗口会冻结。 因此,请分享一个提示。 我认为这与线程有关,但我无法完全理解它。

[CODE]

from Tkinter import *
master = Tk()


def getFiles():
    import wx
    app = wx.App(False)  
    locale = wx.Locale(wx.LANGUAGE_ENGLISH)
    frame = wx.Frame(None, wx.ID_ANY, "test", style=wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN) 
    frame.Center()
    frame.SetBackgroundColour('LIGHTGREY')
    frame.SetSize(200,400)
    # Create grid manager instance
    sizer = wx.GridBagSizer()
    # Create Label for: Available testcase
    entry = wx.StaticText( frame, wx.ID_ANY, u"Available testcases:", wx.DefaultPosition, wx.DefaultSize, 0 )
    sizer.Add(entry,(1,1),(1,1),wx.EXPAND)
    frame.SetSizerAndFit(sizer)
    frame.Show(True)     # Show the frame.
    app.MainLoop()

b = Button(master, text="OK", command=lambda : getFiles())
b.pack()
master.mainloop()

[注] 我需要wxpython因为:GenericDirCtrl对象。 我没有发现一个相同的obj:tkinter,ttk,tix。继续调查

2 个答案:

答案 0 :(得分:4)

你不能把tkinter和wxPython结合起来。它们都是具有自己的事件循环的GUI工具包,它们基本上是从窗口小部件处理事件的无限循环。你不能一次运行两个无限循环。

但是,也许没有理由同时进行这两项工作。如果您需要tkinter中不存在的小部件,只需使用wxPython构建整个应用程序。

答案 1 :(得分:0)

可以将Tkinter与wxPython组合为独立模块,例如以使用其高级打印功能。尝试这样的一行:

os.popen('PP4 \ wxprint_2.py“ {}”'。format(fname))#OK!

(wxprint_2.py是我的wxPython独立打印模块)

唯一的问题是,在我的PC上,打印模块可能在启动时突然爆炸而没有任何警告或线索,可能是因为超出了内存限制。