簡體   English   中英

tkinter:當條目小部件已滿時將焦點移至下一個小部件而不會丟失擊鍵

[英]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.

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