之所以需要这样做,是因为我无需使用条目就可以更改标签的文本。我想改用事件。
我已经尝试过了:
import tkinter as tk
root = tk.Tk()
root.bind("<Button-1>", lambda _: root.focus())
l = tk.Label(root, width=50, height=50, bg="white")
l.bind("<Button-1>", lambda _: l.focus())
l.bind("1", lambda _: l.config(bg="yellow"))
l.bind("2", lambda _: l.config(bg="white"))
l.pack()
root.mainloop()
运行程序时,我希望能够通过以下方式将标签l
的颜色更改为黄色:单击它(我认为这会设置焦点),然后按1并进行更改按2返回至白色;前提是我没有在标签外单击,而是将焦点设置到根小部件(其中键1和2没有绑定到任何回调)。
我知道您可以将键绑定到回调(已对其进行测试),并且我也知道可以将焦点设置为非条目的小部件(也已对其进行测试),但这似乎不起作用
有人可以帮助我吗?
答案 0 :(得分:1)
问题是按钮单击具有两个绑定:一个在标签窗口小部件本身上,一个在根窗口上。由于事件的处理方式,根窗口上的绑定将在标签上的事件之后触发。这意味着您对标签绑定设置的任何焦点都将与根窗口上的绑定撤消。
一种解决方案是更改单击的绑定,将焦点设置为单击的对象。这样,您无需在标签小部件上为单击设置绑定。
hammer.js
另一种解决方案是修改标签上的绑定,以防止根窗口上的绑定触发。您可以通过从调用的函数中返回字符串root.bind("<Button-1>", lambda event: event.widget.focus_set())
来实现。
"break"