【问题标题】:Entry validation stop working when triggered in specific situations条目验证在特定情况下触发时停止工作
【发布时间】:2016-02-08 12:14:44
【问题描述】:

我做了一个申请。它工作正常,除了一件事。我希望某些标签根据条目小部件的内容获得不同的背景颜色,如果内容匹配,则应删除条目的内容,以便可以输入更多数据。我做了一个有同样问题的示例应用程序。

#!/usr/bin/env python

import re
import Tkinter as tk

class Frontend:

    def __init__(self):
        self.root = tk.Tk()
        self.frame = tk.Frame(self.root)
        self.vcmd = (self.frame.register(self.validate), '%P')
        self.entry = tk.Entry(self.frame, vcmd=self.vcmd, validate='key')
        self.label1 = tk.Label(self.frame, text='Foo', bg='green')
        self.label2 = tk.Label(self.frame, text='Bar', bg='green')

        self.frame.pack()
        self.entry.pack()
        self.label1.pack()
        self.label2.pack()

        self.entry.focus()

    def validate(self, inputstring):
        if re.match(r'^foo$', inputstring):
            self.label1.config(bg='red')
            self.entry.delete(0, tk.END)
        elif re.match(r'^bar$', inputstring):
            self.label2.config(bg='red')
            self.entry.delete(0, tk.END)
        elif re.match(r'^delete$', inputstring):
            self.label1.config(bg='green')
            self.label2.config(bg='green')
            self.entry.delete(0, tk.END)
        return True

    def start(self):
        self.root.mainloop()

if __name__ == '__main__':
    root = Frontend()
    root.start()

问题是在第一次匹配后,条目小部件的内容被删除。验证命令停止工作。我怀疑是我删除了导致此问题的条目的内容,但我不确定。我已经确认这个问题存在于 Linux 主机和 Windows 主机上。

任何人都知道为什么验证停止做它应该做的事情?

【问题讨论】:

    标签: python linux windows tkinter


    【解决方案1】:

    验证并非旨在支持在验证期间修改小部件。来自official documentation

    编辑条目时,验证选项也会将自身设置为无 来自 validateCommand 或 invalidCommand 的小部件。 此类版本将覆盖正在验证的版本。

    接着说,如果您希望编辑验证中的条目,您可以在验证完成后使用after_idle 重置验证属性。它看起来像这样:

    self.entry.after_idle(lambda: self.entry.configure(validate='key'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 2020-04-14
      相关资源
      最近更新 更多