2013-08-07 36 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()