【问题标题】:Why doesn't the .bind() method work with a frame widget in Tkinter?为什么 .bind() 方法不能与 Tkinter 中的框架小部件一起使用?
【发布时间】:2013-05-31 03:56:00
【问题描述】:

此代码是尝试将命令绑定到框架,即。当按下“Escape”键时,窗口应该被销毁。

from tkinter import *
from tkinter import ttk

root=Tk()
root.geometry("400x400")

frame1=ttk.Frame(root)
frame1.pack()

def Exit(event):
    root.destroy()

frame1.bind("<Escape>", Exit)

root.mainloop()

如果frame1.bind()root.bind() 替换,代码将按我的预期工作。为什么我上面写的不起作用?

【问题讨论】:

    标签: python events tkinter


    【解决方案1】:

    绑定有效,但只有当框架有焦点时才会触发该事件,并且默认情况下框架没有键盘焦点。

    尝试用frame1.focus_set()设置焦点

    【讨论】:

    • 啊,太棒了。那么改变焦点会影响其他任何事情吗?什么样的小部件通常具有焦点?
    • 应用了 take_focus() 方法的 wigits 会不会搞砸?
    • 改变焦点不会影响其他任何东西。获得焦点的小部件是任何接受输入的小部件——文本小部件、条目小部件等。take_focus() 方法本身并不会“搞砸”事情,但它肯定可以改变行为,因为它被记录在案。
    • 是的,我刚刚用我的新知识重新阅读了所有文档,问题就解决了。谢谢!
    • 这很好,@Bryan。也许您也知道为什么在显示 tkMessageBox 后关键事件(绑定)停止工作? (不过,鼠标按钮事件仍然有效。)重新聚焦框架(如您所建议的)没有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 2022-06-29
    • 2021-08-06
    • 2012-09-19
    相关资源
    最近更新 更多