最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

輸入驗證

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

1、Tkinter 驗證簡介

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

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

1.1 validate命令

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

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

1.2 validatecommand

validatecommand 是一個元組,包含:

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

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

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

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

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

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)建一個驗證命令:

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

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

如果輸入文本不是有效的電子郵件地址,Tkinter 將執(zhí)行 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實現(xiàn)輸入驗證的文章就介紹到這了,更多相關Python Tkinter GUI輸入驗證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python3.6.5基于kerberos認證的hive和hdfs連接調(diào)用方式

    python3.6.5基于kerberos認證的hive和hdfs連接調(diào)用方式

    這篇文章主要介紹了python3.6.5基于kerberos認證的hive和hdfs連接調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • django 通過ajax完成郵箱用戶注冊、激活賬號的方法

    django 通過ajax完成郵箱用戶注冊、激活賬號的方法

    本篇文章主要介紹了django 通過ajax完成郵箱用戶注冊、激活賬號的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 基于Python獲取docx/doc文件內(nèi)容代碼解析

    基于Python獲取docx/doc文件內(nèi)容代碼解析

    這篇文章主要介紹了基于Python獲取docx/doc文件內(nèi)容代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Python全棧之學習MySQL(2)

    Python全棧之學習MySQL(2)

    這篇文章主要為大家介紹了Python全棧之MySQL,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • python:print格式化輸出到文件的實例

    python:print格式化輸出到文件的實例

    今天小編就為大家分享一篇python:print格式化輸出到文件的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Django請求響應Web Http交互的核心機制深入理解

    Django請求響應Web Http交互的核心機制深入理解

    本文深入探討了 Django 中的請求與響應處理,從 Django 請求和響應的基礎知識、生命周期,到 HttpRequest 和 HttpResponse 對象的詳細介紹,同時,討論了 Django 的視圖和請求、響應處理,以及安全性和異步處理的考慮
    2023-09-09
  • Python使用PIL模塊生成隨機驗證碼

    Python使用PIL模塊生成隨機驗證碼

    這篇文章主要為大家詳細介紹了Python使用PIL模塊生成隨機驗證碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 基于python3監(jiān)控服務器狀態(tài)進行郵件報警

    基于python3監(jiān)控服務器狀態(tài)進行郵件報警

    這篇文章主要介紹了基于python3監(jiān)控服務器狀態(tài)進行郵件報警,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Python3非對稱加密算法RSA實例詳解

    Python3非對稱加密算法RSA實例詳解

    這篇文章主要介紹了Python3非對稱加密算法RSA,結合實例形式分析了Python3 RSA加密相關模塊安裝及使用操作技巧,需要的朋友可以參考下
    2018-12-12
  • Python實現(xiàn)用手機監(jiān)控遠程控制電腦的方法

    Python實現(xiàn)用手機監(jiān)控遠程控制電腦的方法

    這篇文章主要介紹了Python實現(xiàn)用手機監(jiān)控遠程控制電腦的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04

最新評論

乐至县| 锡林浩特市| 丘北县| 田阳县| 鄂尔多斯市| 错那县| 萝北县| 淮北市| 涟水县| 手机| 乐安县| 德惠市| 右玉县| 双鸭山市| 运城市| 扎兰屯市| 新干县| 永年县| 镇远县| 定远县| 丹凤县| 慈溪市| 河源市| 松溪县| 治县。| 甘肃省| 隆林| 三河市| 康马县| 亚东县| 安岳县| 昌都县| 荃湾区| 德清县| 综艺| 闸北区| 山东| 余庆县| 开封市| 信丰县| 大荔县|