0

所以我一直在尝试为 tkinter(我正在使用 Python 3.3)获取一个线程安全的适配器来帮助我的一些项目。我偶然发现了一个名为“safetkinter”的配方(配方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

4

1 回答 1

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()
于 2013-11-20T17:23:17.020 回答