簡體   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