我在我的 Mac 上使用 Tkinter。每当我有一个 Checkbutton 或 Radiobutton 时,当我取消选择它时,动画就会出现故障。例如,一个选中按钮,onclick,将在几分之一秒内取消选择,选择一秒钟,然后取消选择 - 有没有人遇到过这个问题,如果有,是否可以修复?
from Tkinter import *
root = Tk()
Checkbutton1 = Checkbutton(root).pack()
root.mainloop()
我在我的 Mac 上使用 Tkinter。每当我有一个 Checkbutton 或 Radiobutton 时,当我取消选择它时,动画就会出现故障。例如,一个选中按钮,onclick,将在几分之一秒内取消选择,选择一秒钟,然后取消选择 - 有没有人遇到过这个问题,如果有,是否可以修复?
from Tkinter import *
root = Tk()
Checkbutton1 = Checkbutton(root).pack()
root.mainloop()
此问题可能与 Mac OS X、Aqua Cocoa Tk 8.5 上的 Tcl/Tk 分发有关。Tkinter 的图形问题已得到确认,但报告并未具体提及 Checkbutton 问题。
您必须获得最新版本的 Tcl 之一(8.5 或 8.6 的一些实现)并将 Python 与它链接。
警告:请参阅下面的编辑,这可能会导致其他软件包出现问题。
我在 homebrew 上按照这个问题用 brew 安装 tcl-tk (8.6),然后让 Python 使用它。Python 2 的命令是:
brew install homebrew/dupes/tcl-tk
brew uninstall python
brew install python --with-tcl-tk
(上面链接中使用的选项是 --with-brewed-tk 但它已被 --with-tcl-tk 弃用)
该公式仅适用于小桶,因此只有 Python 会知道新的 Tcl/Tk。tclsh和wish也将继续使用旧的 Tcl。要检查 Python 中的版本和基本功能:
import Tkinter
Tkinter._test()
要检查 tclsh 中的版本:
puts $tcl_version
对于 Python 3,python3
在 brew 和tkinter
python 脚本中使用。
如果您更喜欢使用 .dmg 并且不介意商业但免费(如啤酒)的解决方案,您可以尝试ActiveTcl。TkDocs 对此有很好的教程。这次它也应该安装一个新的wish。
编辑:按照上述步骤操作后,图形故障应该消失了,但是如果您使用 matplotlib、pillow 或其他使用 Tk 后端的包,则在导入后端模块时可能会收到如下警告:
TKApplication 类在 /usr/local/opt/tcl-tk/lib/libtk8.6.dylib 和 /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk 中实现。将使用两者之一。哪一个是未定义的。
(或者 /Library/Frameworks vs /System/Library/Frameworks 如果你安装了 ActiveTcl)
当使用 matplotlib 绘图时,应用程序崩溃了......所以如果你使用这样的包,我不推荐这种方法。我目前正在尝试让 Python 与 ActiveTcl 一起工作,看看我是否可以消除故障并让 matplotlib 仍然工作。ActiveTcl 8.5 似乎足以消除主要故障,同时与大多数软件包兼容,但我还没有尝试过。
在这个问题中调整枕头安装的设置脚本的一些想法,但我无法将其应用于 matplotlib。