鱼C论坛

 找回密码
 立即注册
查看: 2152|回复: 0

[学习笔记] 多个 Entry组件调用同一个validatecommand 的方法

[复制链接]
发表于 2020-9-24 07:35:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 wxyj3496 于 2020-9-24 07:35 编辑

小甲鱼的tkinter教程中,详细介绍了如何在Entry组件中使用validatecommand的方法,使用函数对Entry的内容进行判读。我在用tkinter编写界面时使用了这个功能,但过程中遇到这样一种情况:
我的界面中有很多个Entry组件,每个都需要判断输入内容是否为数字,执行代码是相同的,只是执行的变量不同。我开始每个Entry对应一个函数,我有十几个Entry,使得程序很繁琐。

我就使用小甲鱼例子的方法,若将Entry的内容作为参数传给validatecommand就可以用同一个函数了,使用“%P”传入当前内容的方法,如下:
e1 = Entry(master, textvariable=v, validate="focusout", validatecommand=(testCMD, '%P''))
但是这个方法只能对内容判读,却无法更改。(我的功能是判读内容是否为数字,若是保留,若不是则清空)。


通过摸索总结了另一种方法,多个Entry可以使用同一函数,并且可以读写,要点如下:
  • 使用“%W”传递Entry的名字
  • 使用tkinter内建的方法“nametowidget”将Entry的名字转换为组件


下面是代码:
import tkinter as tk
from tkinter import ttk

class MainWindow():
        def __init__(self):
                self.win = tk.Tk()
                self.creat_widgets()
        
        def testfloat(self,name_entry):
                widget = self.win.nametowidget(name_entry)  #将名字转换为组件
                textin = widget.get()
                if ltgen.is_number(textin):                # ltgen.isnumber 是判断是否字符的通用代码
                        return True
                else:
                        widget.delete(0,tk.END)
                        return False
        
        def create_widgets(self):
                self.temp_enterVar  = tk.StringVar()
                self.testtemp = self.win.register(self.testfloat)  #注册函数,注册一次可以复用
                self.temp_entered = ttk.Entry(frame_temptran,width = 12,\
                                textvariable = self.temp_enterVar, validate = 'focusout',\
                                validatecommand = (self.testtemp,'%W') )       


win_main = MainWindow()
win_main.win.mainloo()


is_number是我搜集的一段判断是否为数字的代码,我存在一个.py文件里作为通用代码,需要时调用
import re

def is_number(num):
    pattern = re.compile(r'^[-+]?[-0-9]\d*\.\d*|[-+]?\.?[0-9]\d*

)
    result = pattern.match(num)

    if result:
        return True
    else:
        return False


本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 18:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表