簡體   English   中英

即使在 TKinter (python) 中按下 Enter 鍵,如何生成 Tab 鍵?

[英]How to generate tab key even when enter key pressed in TKinter (python)?

我試圖找出如何在 tkinter/python 中生成 TAB 鍵事件。

我在 tkinter 中有一個用於返回鍵的鍵綁定。

am_field_txt.bind('<Return>', next_focus)

我不想調用函數 (next_focus),而是想生成一個 TAB 事件,這樣對正在使用的條目的現有驗證將能夠使用按下 Tab 鍵時發生的“focusout”來運行。 (我已經設置了帶有驗證的文本條目,以便在 validate=focusout 上它會進行檢查並處理所有內容;但我希望它能夠處理用戶可以按返回而不是“focusout”條件(選項卡或單擊文本框外))。 我真的不想使用 validate=key ,因為只要按下某個鍵,該例程就會運行(而且它已經設置好並用於焦點輸出)。

是否有一種簡單的方法來綁定條目的返回鍵,以便發生 TAB 事件?

我在網上找到了 TCL 的文檔,上面寫着:

bind .w <Return> {focus [tk_focusNext %W]}
bind .w <Return> {event generate %W <Tab>}

最后一行是我想要做的 - 除了 Python 和 tkinter 的格式/語法。 我已經使用了 tk_focusNext 函數,但它的 tkinter/python 語法再次不同,所以我認為從第二行開始,它必須意味着有一種方法可以在按下 RETURN 鍵時生成一個 TAB 鍵。 (除此之外,tk_focusNext 也不能​​真正正常工作,似乎選擇了與 Tab 鍵不同的焦點……但這是一個不同的主題)。

可以說,最簡單的方法是准確綁定底層 tk 小部件的作用,通過向 tk 詢問綁定到 tab 鍵的函數並將其分配給 enter 鍵,如下所示:

am_field_txt.bind('<Return>', root.bind_all("<Tab>"))

這將導致 enter 鍵的行為與 tab 鍵完全相同,包括設置焦點和選擇小部件中的文本。

如果您不想選擇下一個小部件中的文本,您可以創建next_focus函數,改為如下所示:

def next_focus(event):
    event.widget.tk_focusNext().focus_set()

您可以在 Python 綁定中使用 TCL 代碼作為參數

import tkinter as tk

root = tk.Tk()

e1 = tk.Entry(root)
e1.pack()
e2 = tk.Entry(root)
e2.pack()

#bind .w <Return> {event generate %W <Tab>}
e1.bind('<Return>', 'event generate %W <Tab>')
e2.bind('<Return>', 'event generate %W <Tab>')

root.mainloop()

還有event_generate()

e2.bind('<Return>', lambda x:root.event_generate('<Tab>'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM