【问题标题】:Safetkinter RuntimeError: Recursion LimitSafetkinter RuntimeError:递归限制
【发布时间】:2013-08-08 06:42:50
【问题描述】:

所以我一直在尝试为 tkinter(我正在使用 Python 3.3)获取一个线程安全的适配器来帮助我的一些项目。我偶然发现了一个名为“safetkinter”(recipe 578153)的配方,它承诺将所有 gui 调用路由到主线程。我试过了,但是我遇到了一个 RuntimeError 问题,它一直在抬头并破坏了我的努力。我尝试了各种方法来修复它,但没有运气。所以......这里有人知道让它工作的诀窍吗? (另外,safetkinter 使用了线程盒配方,以及依赖关系的亲和配方。我也相信亲和模块是这个问题的罪魁祸首。)

我用来测试模块的脚本:

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

【问题讨论】:

    标签: python multithreading python-3.x tkinter ttk


    【解决方案1】:

    正如我在 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()
    

    【讨论】:

      猜你喜欢
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 2015-05-20
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多