【发布时间】:2021-03-23 03:00:59
【问题描述】:
代码:
import tkinter as tk
win = tk.Tk()
win.resizable('False', 'False')
#functions
def entered(): #Receives input by the user and deletes what it has written.
value = entry.get()
entry.delete(0,'end')
def delete_insert(event):#Deletes what it's written by default in the entry widget.
entry.delete(0, 'end')
entry.config(fg = 'black')
def add_insert(event):
entry.insert(0, 'Click Here')
frame = tk.Frame(win)
frame.grid(column = 0, row = 0)
button_entry = tk.Button(frame)
button_entry.pack(side = 'right')
button_entry.config(text = 'Buscar', command = entered)
button_entry.bind('Control-Enter', entered) #Keep this line in mind please.
entry = tk.Entry(frame)
entry.pack(side = 'right', padx = 5)
entry.insert(0,'Click Here') #Default text in entry widget.
entry.bind('<FocusIn>', delete_insert)
entry.bind('<FocusOut>', add_insert)
win.mainloop()
输出:
问题:
在按下Enter 时将button_entry 与entered() 子程序绑定的代码行似乎不起作用。
button_entry.bind('<Control-Enter>', entered)
为什么不呢?当entered()子程序运行时,它会删除entry小部件中插入的文本
def entered(event):
....
entry.delete(0, 'end')
....
entry.insert(0,'Click here')
因此,我的目标是,当按钮button_entry被Enter键激活时,它运行子程序entered()。因此,它会删除用户在entry 中插入的文本。
我尝试过的:
我将参数event添加到entered(),如下entered(event)。与其他功能一样,绑定将起作用。不幸的是,当您单击button_entry 时,您会收到以下错误:
TypeError: entered() missing 1 requiered positional argument: 'event'
虽然,如果您单击键盘上的键 Enter,则不会发生任何事情,或者至少看起来像这样,因为我绑定到 button_entry 的子程序没有执行
我想要完成的工作类似于您在 google 事物时所做的工作,您在搜索引擎中输入您想要的内容,然后在键盘上单击 Enter。
【问题讨论】:
-
你要绑定的是Enter键还是Control和Enter?
-
在创建按钮时设置命令等于“输入”时,您不这样做吗?
-
分配
event=None。另外,请注意,您的按钮需要获得焦点才能获取关键事件。最好用entry.bind('<Control-Return>', entered) -
@Nameless 您正在分配一个默认值。如果在调用函数时没有传递任何参数,则事件采用
None。不,我的意思是entry.bind('<Control-Return>', entered)你的按钮必须有焦点才能接受关键事件。当您在文本框中键入时,焦点将位于条目小部件中,因此button_entry.bind()不太可能起作用。 -
你想用哪个键来触发。