[英]tkinter: Move focus to next widget when entry widget is full without losing keystroke
這是我在這里的第一個問題,如果我做錯了,我很抱歉。
我正在創建一個入口類,它將驗證輸入的長度,然后關注下一個小部件。 下面的代碼執行此操作,但它會在所需長度之后觸發按鍵上的焦點更改,這會導致我們丟失該按鍵
示例:如果您在第一個輸入框中鍵入 123456789,則最終結果將在輸入框 1 中為 1234,在輸入框 2 中為 6789
import tkinter as tk
class ValidateEntry(tk.Frame):
def __init__(self, parent, width=20, txt=None):
tk.Frame.__init__(self, parent)
self.width = width
vcmd = (self.register(self.validate), '%i', '%S', '%d', '%P')
self.entry = tk.Entry(self, width=self.width, validate='key', vcmd=vcmd)
if txt is not None:
self.entry.insert('end', txt)
self.entry.pack()
def validate(self, i, S, d, P):# i = index, S = insert character, d = action, P = entry value
if len(P)-1 == self.width and d != 0:
self.entry.tk_focusNext().focus()
return False
return True
root = tk.Tk()
entry1 = ValidateEntry(root, width=4)
entry2 = tk.Entry(root, width=8)
entry1.pack()
entry2.pack()
root.mainloop()
我想不出一種方法來改變焦點並保持上例中的第 5 個按鍵
在第 4 次按鍵時,您希望接受該鍵(因此返回 true)並更改焦點。 所以只需將驗證功能更改為:
def validate(self, i, S, d, P):# i = index, S = insert character, d = action, P = entry value
if len(P) == self.width and d != 0:
self.entry.tk_focusNext().focus()
return True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.