gpt4 book ai didi

python - 在特定情况下触发时输入验证停止工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:49:13 26 4
gpt4 key购买 nike

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

#!/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主机都存在这个问题。

有人知道为什么验证会停止执行它应该执行的操作吗?

最佳答案

验证不支持在验证期间修改小部件。来自official documentation :

The validate option will also set itself to none when you edit the entry widget from within either the validateCommand or the invalidCommand. Such editions will override the one that was being validated.

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

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

关于python - 在特定情况下触发时输入验证停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33582211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com