2013-08-07 66 views
0

所以我一直在嘗試爲tkinter(我正在使用Python 3.3)獲得一個線程安全適配器來幫助我的一些項目。我偶然發現了一個名爲「safetkinter」的配方(配方578153),它承諾將所有gui調用路由到主線程。我嘗試了一下,但是我遇到了一個RuntimeError問題,這個RuntimeError一直在擡頭,破壞了我的努力。我嘗試了各種方法修復它,但沒有運氣。所以......這裏有人知道讓這個工作起作用的訣竅嗎? (也safetkinter利用了threadbox配方,並通過相關的親和力配方我也相信,親和模塊是這一問題的罪魁禍首。)Safetkinter RuntimeError:遞歸限制

我用測試模塊的腳本:

import safetkinter as tkinter 

class Main(tkinter.Tk): 
    def __init__(self): 
     self._setup() 
     self.mainloop() 

    def _setup(self): 
     tkinter.Button(self, text='Push me!').pack() 

if __name__ == '__main__': 
    Main() 

而且,這裏是一個鏈接從控制檯所採取的例外回溯: Traceback

回答

0

正如我在safetkinter使用的例子看,初始化應該用另一種方式來完成。以下是基於代碼和safetkinter示例的簡短工作代碼(帶有按鈕的框架)。您可以擴展和改進它:

import safetkinter as tkinter 

class Main(tkinter.Frame): 
    def __init__(self, master, **kw): 
     super().__init__(master, **kw) 

    @classmethod 
    def main(cls): 
     root = cls.create_application_root() 
     self = cls.setup_class_instance(root) 
     root.mainloop() 

    @staticmethod 
    def create_application_root(): 
     root = tkinter.Tk() 
     root.minsize(400, 340) 
     root.title('Title') 
     return root 

    @classmethod 
    def setup_class_instance(cls, root): 
     instance = cls(root) 
     instance.button = tkinter.Button(root, text='Push me!').pack() 
     return instance 

if __name__ == '__main__': 
    Main.main()