【问题标题】:Tkinter (tkinter.Tk()) hangs on MacOSTkinter (tkinter.Tk()) 在 MacOS 上挂起
【发布时间】:2019-06-18 21:57:32
【问题描述】:

参考:MacOS 10.14、Anaconda 的 Python 3.6、Spyder 3.3.4

我刚刚开始使用 Python 中的 tkinter,并且正在尝试运行从 Spyder 中找到的简单演示代码 here。为了完整起见,6行脚本如下:

import tkinter as tk 
r = tk.Tk() 
r.title('Counting Seconds') 
button = tk.Button(r, text='Stop', width=25, command=r.destroy) 
button.pack() 
r.mainloop()

但是,当我运行它时,它会挂起。没有沙滩球,没有冰冻,什么都没有发生。摆脱挂起命令的唯一方法是重新启动 IPython 内核,或者关闭并重新启动 Spyder。

我想我已经将问题归结为:

r = tk.Tk()

如果单独执行,也会以同样的方式导致挂起。

我知道 MacOS 上的 Tkinter 和 Python 之间存在许多问题(例如 this),但我所见过的似乎都没有重现这个特定问题。

有什么想法吗?

【问题讨论】:

  • 我认为 Spyder 不能与 tkinter 一起正常工作。在终端上尝试python3 -m tkinter,如果弹出一个窗口没有任何挂起,那么 tkinter 在你的 Mac 上是很好的,你应该尝试其他一些 IDE,如 vscode 或 IDLE,但如果它挂起,然后尝试再次安装 anaconda。我一直在 mac 10.15.0、anaconda、vscode 1.35.0 上使用 tkinter,到目前为止我还没有遇到过这样的问题。
  • 感谢@Saad 的评论。事实上,当我从命令行运行 python3 -m tkinter 时,我得到一个窗口,并且上面的脚本在 IDLE 中运行时没有错误。但是,它只适用于运行 Python 2.6 的 IDLE;当我尝试启动与我的 Python 3.6 关联的 IDLE 时,编辑器显示为空白。这似乎也与 mac 上的 tcl/tk 问题有关(例如here),所以我认为我上面链接的 Python 页面可能是解决方案。感谢您的有用评论。
  • 如果你开启了黑暗模式,那么它就可以了。可能这个answer 可能会对您有所帮助。我有一些类似的问题。简而言之,在 mac 上,我猜 Tcl/Tk 的默认版本是 8.5,它有一些问题,而苹果只是没有更新。所以新的 python 包带有它们自己的 Tcl/Tk 版本。
  • @Saad 我确实启用了暗模式,但空白的 IDLE3.6 窗口并不像您的回答所暗示的那样是黑色的。而且,此外,我正在运行 tk/tcl 8.6.9,所以旧的 tcl/tk 版本不是这里的问题。还有其他想法吗?
  • IDLE 上的 Python 和 anaconda 上的 Python 都是不同的东西,都有自己的 Tcl/Tk 版本。尝试禁用暗模式并运行它,您也可以尝试直接从 anaconda-navigator 安装和使用 vscode。

标签: python-3.x macos tkinter


【解决方案1】:

部分感谢 @Saad 提供的一些有用的 cmets,我想我解决了这个问题。 Python 3.6.7(来自 Anaconda)和 tk/tcl 8.6.9 似乎不太好用。如果我将 tk/tcl 降级到 8.6.8,那么无论我使用什么 IDE,一切正常。

【讨论】:

    猜你喜欢
    • 2017-03-20
    • 1970-01-01
    • 2017-02-06
    • 2020-03-20
    • 2022-09-24
    • 2023-01-18
    • 2015-10-02
    • 2022-12-29
    • 2022-07-12
    相关资源
    最近更新 更多