Tkinter导致SIGSEGV和系统崩溃-如何解决?

时间:2019-07-29 16:09:35

标签: python macos tkinter segmentation-fault

我正在为python项目开发Tkinter GUI。昨天一切都很好,但是今天当我运行mainloop()命令时,我的Mac立即崩溃(返回登录屏幕)。

我试图通过减少GUI功能来隔离问题,但没有任何帮助。最简单的GUI甚至会出现问题。

我正在使用此演示代码:

from tkinter import Tk, Label, Button

class MyFirstGUI:
    def __init__(self, master):
        self.master = master
        master.title("A simple GUI")


root = Tk()
my_gui = MyFirstGUI(root)
root.mainloop()

当我运行最后一行时,我的屏幕变黑一秒钟,然后返回MacOS登录屏幕。从终端运行脚本时也会发生。重复几次后,我发现此行在每次崩溃后都会在system.log中再次出现:

Jul 29 17:58:51 MacBook-Pro-myname com.apple.xpc.launchd[1] (com.apple.WindowServer[1510]): Service exited due to SIGSEGV | sent by exc handler[1510]

处理程序号对于每次崩溃都是唯一的。以安全模式启动可以解决问题,但是我当然不能永远生活在安全模式下:)

这似乎是某种内部问题,因为python代码再简单不过了。我不知道如何调试它,有人可以帮我吗?

已修复-由于某些原因,Tkinter开始弄乱我的机器。更新到8.6.9解决了该问题。 (请参阅:https://bugs.python.org/issue34927

2 个答案:

答案 0 :(得分:2)

出于某种原因,原来的标准版本的Tkinter(8.6。*)不再正常运行。我找到了https://bugs.python.org/issue34927,并在将其更新为Tkinter 8.6.9(conda forge)之后不久,似乎已经解决了该问题。

答案 1 :(得分:0)

我有同样的问题(很长时间以来,我不得不使用Linux机器来运行我的脚本)。但是,您可以通过以下方式解决问题 conda install -c zeus1942 tk 我评论时这是Tkinter 8.6.10的最新版本。它解决了我的问题,但并非总是如此。