Tkinter Mac Checkbutton 取消选择动画故障

Tkinter Mac Checkbutton Deselect Animation Glitch

我在 Mac 上使用 Tkinter。每当我有一个 Checkbutton 或 Radiobutton 时,我 deselect 时的动画就会出现故障。例如,一个被选中的复选按钮,onclick,将 deselect 几分之一秒, select 一秒钟,然后 deselect - 有没有人遇到过这个问题,如果那么,它可以修复吗?

from Tkinter import *
root = Tk()
Checkbutton1 = Checkbutton(root).pack()
root.mainloop()

这个问题可能与 Tcl/Tk 在 Mac OS X, Aqua Cocoa Tk 8.5 上的分布有关。图形问题 have been confirmed for Tkinter,尽管报告没有具体提及 Checkbutton 问题。

您必须安装最新版本的 Tcl(8.5 或 8.6 的一些实现)和 link Python。

警告:请参阅下面的编辑,这可能会导致其他软件包出现问题。

我跟着this issue on homebrew用brew安装了tcl-tk(8.6),然后让Python使用它。 Python 2 的命令是:

brew install homebrew/dupes/tcl-tk
brew uninstall python
brew install python --with-tcl-tk

(上面link中使用的选项是--with-brewed-tk,但它已被弃用--with-tcl-tk)

配方仅适用于小桶,因此只有 Python 知道新的 Tcl/Tk。 tclshwish 也将继续使用旧的 Tcl。 查看Python中的版本和基本功能:

import Tkinter
Tkinter._test()

检查 tclsh 中的版本:

puts $tcl_version

对于 Python 3,在 brew 中使用 python3,在 python 脚本中使用 tkinter

如果您更喜欢使用 .dmg 并且不介意商业但免费(如啤酒)解决方案,您可以尝试 ActiveTcl. TkDocs has a good tutorial。这次它还应该安装一个新的 wish.

编辑:执行上述步骤后,图形故障应该已经消失,但是如果您使用 matplotlib、pillow 或其他使用 Tk 后端的包,您可能会在导入后端模块时收到如下所示的警告:

Class TKApplication is implemented in both /usr/local/opt/tcl-tk/lib/libtk8.6.dylib and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined.

(或者 /Library/Frameworks vs /System/Library/Frameworks 如果你安装了 ActiveTcl)

用matplotlib绘图时应用程序崩溃了...所以如果你使用这样的包我不推荐这种方法。我目前正在尝试让 Python 与 ActiveTcl 一起工作,看看我是否可以消除故障并让 matplotlib 仍然工作。 ActiveTcl 8.5 似乎足以消除主要故障,同时与大多数软件包兼容,但我还没有尝试。

在此 issue 中调整枕头安装的设置脚本的一些想法,但我无法将其应用于 matplotlib。