Python-Tkinter使用颜色的文本输入验证

2024-09-27 19:10:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python和Tkinter的新手,正在尝试使用指示颜色(黑色=有效项;蓝色=有效,默认值;红色=无效项)验证数字文本项。我可以使用以下代码为每个条目显式地执行此操作:

pdef = 14.7
p = 60

Label(parent, text="Pressure").grid(in_=frame_a,row=3, column=2, sticky='e')
p_entry = Entry(parent, width=8 ,textvariable=p, fg = pcolor)
p_entry.grid(in_=frame_a,row=3, column=3, padx=2, pady=2, sticky='we', columnspan=1)
p_entry.bind("<FocusOut>", validate)

def validate(event):
   global pcolor
   pmax = 30000
   pmin = 0
   y = p.get()

   if y == pdef:
       pcolor = 'blue'
   elif y < pmin or y > pmax:
       pcolor = 'red'
   else:
      pcolor = 'black'
   p_entry.config(fg = pcolor)  # explicitly set text color in p_entry textbox
   return(pcolor)

但是,我现在看到了采用面向对象方法的价值,在这种方法中,我可以将当前值、高值、低值和默认值传递给validate方法,并返回一个可以是3个值之一的标志。问题是,我看不出如何根据以通用方式而不是显式方式返回的值对文本应用操作颜色。在

任何帮助将不胜感激!在

谢谢, 麦克

[编辑]

谢谢亚当。你的第一个例子说明了我想做什么。但是,我希望validate函数用于文本框验证的各种实例。我已经根据您建议的部分函数修改了代码。这是我所拥有的。。。在

^{pr2}$

我还有几个问题: 1) 当触发<FocusOut>事件时,传递给color change函数的字段值是初始化值,而不是编辑的值 2) 我不知道如何将self.p_entry.config(上面是硬编码的)替换为绑定到文本输入实例的通用变量(我传递'name')

感谢任何帮助! 谢谢, 麦克


Tags: 方法函数代码textin文本颜色validate
1条回答
网友
1楼 · 发布于 2024-09-27 19:10:56

试试这个:

from functools import partial
PMIN, PMAX = 0, 30000

def color_changer(event, pmin, pmax):

    def validator(value):
        if value < pmin:
            return -1
        if value > pmax:
            return 1
        else:
            return 0

    pressure = p.get()
    result = validator(pressure)
    if result == 0:
       p_entry.config(fg='black')
    else:
       p_entry.config(fg='red')

p_entry.bind("<FocusOut", partial(color_changer, pmin=PMIN, pmax=PMAX))

您的另一个选择可能是创建一个产生验证函数的闭包,并在回调中使用它。比如:

^{pr2}$

实际上,我得到了一个与这种方法非常相似的答案,时间不长。在

相关问题 更多 >

    热门问题