python tkinter事件不适用于框架内的输入

时间:2018-12-27 22:31:13

标签: python events tkinter

我有一个条目在一个框架内。我想通过该条目传递一个事件。

以下是有效的代码,但是在框架中不包含条目:

import tkinter as tk
myUi= tk.Tk()
myFrame = tk.Frame(myUi)
myFrame.pack()
def printMe(event):
    value = event.widget.get()
    print(value)
myEntry = tk.Entry(myUi,name='entry')
myEntry.bindtags(('.entry','Entry'))
myEntry.bind("<KeyRelease>", printMe)
myEntry.pack()
myUi.mainloop()

这是无效的代码:

import tkinter as tk
myUi= tk.Tk()
myFrame = tk.Frame(myUi)
myFrame.pack()
def printMe(event):
    value = event.widget.get()
    print(value)
myEntry = tk.Entry(myFrame,name='entry')
myEntry.bindtags(('.entry','Entry'))
myEntry.bind("<KeyRelease>", printMe)
myEntry.pack()
myUi.mainloop()

1 个答案:

答案 0 :(得分:1)

当您将条目放置在框架中时,其绑定标签将包含其自己的名称以及由句号分隔的祖先的名称。在这种特定情况下,该条目的绑定标签为.!frame.myentry。您可以通过在更改默认绑定标签(例如:print(str(myEntry)))之前打印出默认绑定标签来查看此信息

由于您将条目的绑定标签更改为('.entry', 'Entry'),因此窗口小部件本身(即:在绑定标签.!frame.entry上)的任何绑定都不会与窗口小部件关联。