为了账号安全,请及时绑定邮箱和手机立即绑定

简单的 tkinter 按钮适用于 Python 3.5

简单的 tkinter 按钮适用于 Python 3.5

慕田峪9158850 2021-11-30 15:58:18
在 MacOS 10.12.6 上的 Python 3.6 和 3.7 上, atkinter.Button最初不会响应点击 - 但相同的代码在 Python 3.5 上运行良好。如果我运行以下脚本:import tkinter as tkroot = tk.Tk()button = tk.Button(root, text='Button')button.pack()root.mainloop()然后在 Python 3.6 和 3.7 上,按预期出现一个带有单个按钮的窗口,它在视觉上没有被禁用,但单击它没有任何效果。调整窗口大小或单击其中的其他位置并不能解决问题。但是,如果我将另一个应用程序置于前台,然后将 Python 应用程序置于前台,则一切正常,然后我无法使问题再次出现。在 Python 3.5 中,运行测试脚本会启动应用程序,并且按钮会立即响应点击——正如预期的那样。实验无法重现 3.5 中的任何问题。如果tkinter被替换为Tkinter.将pack布局管理器更改grid为完全相同的结果。我什至重新启动了机器,没有任何变化。我几乎 100% 确定 Python 3.6 和 Python 3.7 二进制文件和库处于良好状态。它们本质上是全新安装,因为我完全在 virtualenvs 中工作。tkinter除了这个问题之外,我的非平凡应用程序在 Python 3.5、3.6 和 3.7 上的运行完全相同。
查看完整描述

1 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

我没有要测试的 Mac,但您的问题听起来与在主循环完成第一个完整循环之前打开文件对话框时在 Windows 上可能发生的焦点问题非常相似。该问题具有相同的症状,例如不允许焦点回到窗口,直到您启动其他应用程序然后返回到 tkinter 应用程序然后它才能工作。

纠正焦点问题的方法是root.update_idletasks()在问题之前应用(即在打开文件对话框之前),在这种情况下,就在您的按钮之前。

正如 OP 所指出的,他们必须root.update_idletasks()在小部件之前和之后添加,我不确定为什么这是 OSX 的修复程序。对于那些在 Mac 上遇到相同问题的人,请继续尝试使用此选项来解决问题。


查看完整回答
反对 回复 2021-11-30
  • 1 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信