中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么使用Tkinter?GUI實現輸入驗證功能

發布時間:2022-04-29 10:10:36 來源:億速云 閱讀:274 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Python怎么使用Tkinter GUI實現輸入驗證功能”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Python怎么使用Tkinter GUI實現輸入驗證功能”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    1、Tkinter 驗證簡介

    Tkinter 驗證依賴于可用于任何輸入小部件(例如 Entry 小部件)的三個選項:

    • validate:指定哪種類型的事件將觸發驗證。

    • validatecommand:檢查數據是否有效

    • invalidcommand:當數據無效時執行。 換句話說,如果 validate 命令返回 False,它將執行。

    1.1 validate命令

    validate 命令可以是以下字符串值之一:

    名稱描述
    ‘focus’驗證小部件何時獲得或失去焦點
    ‘focusin’每當小部件獲得焦點時進行驗證
    ‘focusout’驗證小部件何時失去焦點
    ‘key’每當任何擊鍵更改小部件的內容時進行驗證
    ‘all’在上述所有情況下驗證聚焦、聚焦和關鍵
    ‘none’關閉驗證。 默認設置

    1.2 validatecommand

    validatecommand 是一個元組,包含:

    • 對 Tcl/tk 函數的引用。

    • 零個或多個替換代碼指定觸發要傳遞給函數的事件的信息。

    要獲取對 Tck/tk 函數的引用,請將可調用對象傳遞給 widget.register() 方法。 它返回一個可以與 validate 命令一起使用的字符串。

    下表顯示了可用于元組的替換代碼:

    名稱描述
    %d'操作代碼:0 表示嘗試刪除,1 表示嘗試插入,或 -1 如果調用回調以聚焦、聚焦或更改“文本變量”
    '%i'當用戶試圖插入或刪除文本時,此參數將是插入或刪除開始的索引。 如果回調是由于聚焦、聚焦或更改“textvariable”,則參數將為“-1”
    '%P'如果允許更改,文本將具有的值
    '%s'更改前Entry中的文本
    '%S'如果調用是由于插入或刪除,此參數將是被插入或刪除的文本
    '%v'小部件的 validate 選項的當前值
    '%V'此回調的原因:如果 textvariable 被更改,則為 'focusin''focusout''key''forced' 之一
    '%W'小部件的名稱

    以下示例構造一個使用 self.validate() 方法和 %P 替換代碼的 validatecommand:

    vcmd = (self.register(self.validate), '%P')

    1.3 invalidcommand

    與 validatecommand 一樣,invalidcommand 也需要使用 widget.register() 方法和替換代碼。

    以下示例返回一個元組,您可以將其傳遞給 invalidcommand 選項:

    ivcmd = (self.register(self.on_invalid),)

    2、完整示例

    下面將創建一個包含電子郵件輸入的表單。 如果輸入了無效的電子郵件地址,它將顯示一條錯誤消息并將電子郵件輸入的文本顏色更改為紅色。 當焦點移出條目時,我們將觸發驗證事件。

    import tkinter as tk
    from tkinter import ttk
    import re
    
    class App(tk.Tk):
        def __init__(self):
            super().__init__()
            self.title('Tkinter Validation Demo')
            self.create_widgets()
        def create_widgets(self):
            self.columnconfigure(0, weight=1)
            self.columnconfigure(1, weight=3)
            self.columnconfigure(2, weight=1)
            # label
            ttk.Label(text='Email:').grid(row=0, column=0, padx=5, pady=5)
            # email entry
            vcmd = (self.register(self.validate), '%P')
            ivcmd = (self.register(self.on_invalid),)
            self.email_entry = ttk.Entry(self, width=50)
            self.email_entry.config(validate='focusout', validatecommand=vcmd, invalidcommand=ivcmd)
            self.email_entry.grid(row=0, column=1, columnspan=2, padx=5)
            self.label_error = ttk.Label(self, foreground='red')
            self.label_error.grid(row=1, column=1, sticky=tk.W, padx=5)
            # button
            self.send_button = ttk.Button(text='Send').grid(row=0, column=4, padx=5)
        def show_message(self, error='', color='black'):
            self.label_error['text'] = error
            self.email_entry['foreground'] = color
        def validate(self, value):
            """
            Validat the email entry
            :param value:
            :return:
            pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
            if re.fullmatch(pattern, value) is None:
                return False
            self.show_message()
            return True
        def on_invalid(self):
            Show the error message if the data is not valid
            self.show_message('Please enter a valid email', 'red')
    if __name__ == '__main__':
        app = App()
        app.mainloop()

    示例代碼如何工作?

    第一步,使用 self.validate() 方法和 %P 替換代碼創建一個驗證命令:

    vcmd = (self.register(self.validate), '%P')

    第二步,創建使用 self.on_invalid 方法的 invalidatecommand:

    ivcmd = (self.register(self.on_invalid),)

    第三步,配置使用validationvalidatecommandinvalidatecommand的Entry小部件:

    self.email_entry.config(validate='focusout', validatecommand=vcmd, invalidcommand=ivcmd)

    第四步,定義改變 label_error 小部件的文本和 email_entry 小部件的文本顏色的 show_message() 方法:

    def show_message(self, error='', color='black'):
        self.label_error['text'] = error
        self.email_entry['foreground'] = color

    第五步,定義驗證 email_entry 值的 validate() 方法。

    def validate(self, value):
        """
        Validat the email entry
        :param value:
        :return:
        """
        pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
        if re.fullmatch(pattern, value) is None:
            return False
        self.show_message()
        return True

    如果輸入文本有效,則 validate() 方法返回 True,否則返回 False。 如果輸入文本是有效的電子郵件地址,請調用 show_message() 隱藏錯誤消息并將文本顏色設置為黑色。

    如果輸入文本不是有效的電子郵件地址,Tkinter 將執行 on_invalid() 方法。

    最后,定義顯示錯誤消息的 on_invalid() 方法并將 email_entry 小部件的文本顏色設置為紅色。

    def on_invalid(self):
        """
        Show the error message if the data is not valid
        :return:
        """
        self.show_message('Please enter a valid email', 'red')

    讀到這里,這篇“Python怎么使用Tkinter GUI實現輸入驗證功能”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    白沙| 元谋县| 微山县| 郁南县| 封开县| 合江县| 饶平县| 青浦区| 东乌珠穆沁旗| 景洪市| 利津县| 怀安县| 吉隆县| 务川| 达拉特旗| 广安市| 宽城| 库伦旗| 松滋市| 西畴县| 苏州市| 清新县| 沐川县| 阳东县| 沾益县| 安西县| 贵定县| 玉树县| 綦江县| 黄平县| 罗山县| 鞍山市| 西青区| 宣汉县| 洮南市| 兴山县| 永清县| 兴文县| 定州市| 吉木乃县| 衡阳市|