欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用Tkinter?GUI實(shí)現(xiàn)輸入驗(yàn)證功能

 更新時(shí)間:2022年04月28日 16:18:13   作者:視覺智能  
這篇文章主要介紹了Python中使用Tkinter?GUI實(shí)現(xiàn)輸入驗(yàn)證,文中通過一個(gè)完整示例代碼給大家介紹Python?Tkinter?GUI輸入驗(yàn)證功能,需要的朋友可以參考下

輸入驗(yàn)證

在本文中,將介紹如何使用 Tkinter 驗(yàn)證來驗(yàn)證用戶輸入。

1、Tkinter 驗(yàn)證簡介

Tkinter 驗(yàn)證依賴于可用于任何輸入小部件(例如 Entry 小部件)的三個(gè)選項(xiàng):

  • validate:指定哪種類型的事件將觸發(fā)驗(yàn)證。
  • validatecommand:檢查數(shù)據(jù)是否有效
  • invalidcommand:當(dāng)數(shù)據(jù)無效時(shí)執(zhí)行。 換句話說,如果 validate 命令返回 False,它將執(zhí)行。

1.1 validate命令

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

名稱描述
‘focus’驗(yàn)證小部件何時(shí)獲得或失去焦點(diǎn)
‘focusin’每當(dāng)小部件獲得焦點(diǎn)時(shí)進(jìn)行驗(yàn)證
‘focusout’驗(yàn)證小部件何時(shí)失去焦點(diǎn)
‘key’每當(dāng)任何擊鍵更改小部件的內(nèi)容時(shí)進(jìn)行驗(yàn)證
‘all’在上述所有情況下驗(yàn)證聚焦、聚焦和關(guān)鍵
‘none’關(guān)閉驗(yàn)證。 默認(rèn)設(shè)置

1.2 validatecommand

validatecommand 是一個(gè)元組,包含:

  • 對(duì) Tcl/tk 函數(shù)的引用。
  • 零個(gè)或多個(gè)替換代碼指定觸發(fā)要傳遞給函數(shù)的事件的信息。

要獲取對(duì) Tck/tk 函數(shù)的引用,請(qǐng)將可調(diào)用對(duì)象傳遞給 widget.register() 方法。 它返回一個(gè)可以與 validate 命令一起使用的字符串。

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

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

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

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

1.3 invalidcommand

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

以下示例返回一個(gè)元組,您可以將其傳遞給 invalidcommand 選項(xiàng):

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

2、完整示例

下面將創(chuàng)建一個(gè)包含電子郵件輸入的表單。 如果輸入了無效的電子郵件地址,它將顯示一條錯(cuò)誤消息并將電子郵件輸入的文本顏色更改為紅色。 當(dāng)焦點(diǎn)移出條目時(shí),我們將觸發(fā)驗(yàn)證事件。

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 替換代碼創(chuàng)建一個(gè)驗(yàn)證命令:

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

第二步,創(chuàng)建使用 self.on_invalid 方法的 invalidatecommand:

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

第三步,配置使用validation、validatecommandinvalidatecommand的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

第五步,定義驗(yàn)證 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。 如果輸入文本是有效的電子郵件地址,請(qǐng)調(diào)用 show_message() 隱藏錯(cuò)誤消息并將文本顏色設(shè)置為黑色。

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

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

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

到此這篇關(guān)于Python使用Tkinter GUI實(shí)現(xiàn)輸入驗(yàn)證的文章就介紹到這了,更多相關(guān)Python Tkinter GUI輸入驗(yàn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python解方程組 scipy.optimize.fsolve()函數(shù)如何求解帶有循環(huán)求和的方程式

    Python解方程組 scipy.optimize.fsolve()函數(shù)如何求解帶有循環(huán)求和的方程式

    這篇文章主要介紹了Python解方程組 scipy.optimize.fsolve()函數(shù)如何求解帶有循環(huán)求和的方程式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • 對(duì)Python3中dict.keys()轉(zhuǎn)換成list類型的方法詳解

    對(duì)Python3中dict.keys()轉(zhuǎn)換成list類型的方法詳解

    今天小編就為大家分享一篇對(duì)Python3中dict.keys()轉(zhuǎn)換成list類型的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • python正則表達(dá)式常見的知識(shí)點(diǎn)匯總

    python正則表達(dá)式常見的知識(shí)點(diǎn)匯總

    正則表達(dá)式提供了一些可用的匹配模式,比如忽略大小寫、多行匹配等,下面這篇文章主要給大家介紹了關(guān)于python正則表達(dá)式常見的知識(shí)點(diǎn),文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Python 如何解決稀疏矩陣運(yùn)算

    Python 如何解決稀疏矩陣運(yùn)算

    這篇文章主要介紹了Python 解決稀疏矩陣運(yùn)算的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2021-05-05
  • python實(shí)現(xiàn)圖片篩選程序

    python實(shí)現(xiàn)圖片篩選程序

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)圖片篩選程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 詳解python函數(shù)傳參傳遞dict/list/set等類型的問題

    詳解python函數(shù)傳參傳遞dict/list/set等類型的問題

    這篇文章主要介紹了詳解python函數(shù)傳參傳遞dict/list/set等類型的問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python函數(shù)式編程的用法詳解

    Python函數(shù)式編程的用法詳解

    Python函數(shù)式編程是一種編程范式,它強(qiáng)調(diào)使用純函數(shù)來處理數(shù)據(jù),在函數(shù)式編程中,函數(shù)被視為一等公民,可以像值一樣傳遞和存儲(chǔ),本教程將介紹如何使用Python進(jìn)行函數(shù)式編程,并提供一些示例,需要的朋友可以參考下
    2023-06-06
  • Python+Pygame實(shí)現(xiàn)接小彈珠游戲

    Python+Pygame實(shí)現(xiàn)接小彈珠游戲

    這篇文章主要為大家詳細(xì)介紹了Python如何利用Pygame實(shí)現(xiàn)接小彈珠游戲,即用擋板接住會(huì)反彈的小球,隨著次數(shù)的增多,速度變快,分?jǐn)?shù)增多,感興趣的可以了解一下
    2022-12-12
  • 詳解python中的變量

    詳解python中的變量

    這篇文章主要為大家詳細(xì)介紹了python的變量,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • python使用回溯算法實(shí)現(xiàn)列表全排列

    python使用回溯算法實(shí)現(xiàn)列表全排列

    這篇文章主要介紹了python使用回溯算法實(shí)現(xiàn)列表全排列,研究的問題是輸入列表L(不含重復(fù)元素),輸出L的全排列,全排列問題,可以用回溯法解決,需要的朋友可以參考下
    2023-11-11

最新評(píng)論