繁体   English   中英

用按键将按钮绑定到子程序

[英]Binding button to subprogram with a key

代码:

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()

Output:

输出

问题:

按下Enter时将button_entry与 enter entered()子程序绑定的代码行似乎不起作用。

button_entry.bind('<Control-Enter>', entered)

为什么不? entered()子程序运行时,它会删除在entry小部件中插入的文本

def entered(event):
    ....

    entry.delete(0, 'end')

....

entry.insert(0,'Click here')

因此,我的目标是,当按钮button_entryEnter键激活时,它运行子程序entered() 因此,它会删除用户在entry中插入的文本。

期望输出

我试过的:

我将参数event添加到entered()中,如下所示entered(event) 与其他功能一样,绑定将起作用。 不幸的是,当您单击button_entry时,您会收到以下错误:

TypeError: entered() missing 1 requiered positional argument: 'event'

虽然,如果您单击Enter (键盘上的键),什么也不会发生,或者至少看起来像这样,因为我绑定到button_entry的子程序没有执行

我想要完成的事情类似于你在谷歌搜索时所做的事情,你在搜索引擎中输入你想要的内容,然后点击键盘上的输入。

两个错误,您的绑定密钥错误,您的 function 调用似乎也错误。 再加上你正在绑定到按钮,那么它需要按钮有焦点,只有这样bind才会起作用。 所以你的代码是:

def entered(event=None): 
   value = entry.get()
   entry.delete(0,'end')

entry.bind('<Return>',lambda event: entered()) # Bind the enter key to the entry
# OR win.bind(same thing above)

event设置为None以便当按钮尝试调用此 function 并且没有传递任何参数时,它不会向您抛出错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM