Python 将默认值插入tkinter条目将停止验证

Python 将默认值插入tkinter条目将停止验证,python,validation,tkinter,tk,Python,Validation,Tkinter,Tk,我一直在跟踪来自的输入框验证。下面的代码来自带有附加条件的答案,即如果输入值是'Q',则程序将'test'添加到输入值的开头 但是,一旦插入此值,所有验证都会显示在窗口之外,并且条目允许使用大写值。对我的程序进行的一些测试表明,验证命令(OnValidate在本例中)不会在条目的任何进一步事件(key、focusin/out等)上调用 我这样做的原因是,如果用户进行任何更改后,条目的值保留为空,我希望该条目显示默认值。(也就是说,如果不是P,我的情况将是聚焦输出时的) 任何关于如何实现这一点的想

我一直在跟踪来自的输入框验证。下面的代码来自带有附加条件的答案,即如果输入值是
'Q'
,则程序将
'test'
添加到输入值的开头

但是,一旦插入此值,所有验证都会显示在窗口之外,并且条目允许使用大写值。对我的程序进行的一些测试表明,验证命令(
OnValidate
在本例中)不会在条目的任何进一步事件(key、focusin/out等)上调用

我这样做的原因是,如果用户进行任何更改后,条目的值保留为空,我希望该条目显示默认值。(也就是说,如果不是P,我的情况将是聚焦输出时的


任何关于如何实现这一点的想法,或者上面提到的问题,我都非常感激。

我将完全基于以下内容回答:

我这样做的原因是我希望条目显示默认值 值,如果其值在用户进行任何更改后保留为空 用户

希望这个例子能告诉你你想要什么:

import Tkinter as tk

def analyze(event=None):
    content = entry_contents.get()
    if content == "":
        entry_contents.set("default")

lord = tk.Tk()

entry_contents = tk.StringVar()
aEntry = tk.Entry(lord, textvariable=entry_contents)
aEntry.grid()

aText = tk.Text(lord, font=("Georgia", "12"))
aText.grid()

aEntry.bind("<FocusOut>", analyze)

lord.mainloop()
将Tkinter作为tk导入
def分析(事件=无):
content=entry\u contents.get()
如果内容==“”:
条目\u contents.set(“默认值”)
lord=tk.tk()
条目内容=tk.StringVar()
aEntry=tk.Entry(主,textvariable=Entry\u内容)
网格()
aText=tk.Text(主,字体=(“格鲁吉亚”,“12”))
aText.grid()
aEntry.bind(“,analyze)
lord.mainloop()
或者,如果一张照片对你没有任何用处:

import Tkinter as tk

def analyze(event=None):
    content = aEntry.get()
    if content == "":
        aEntry.insert(0, "default")

lord = tk.Tk()

aEntry = tk.Entry(lord)
aEntry.grid()

aText = tk.Text(lord, font=("Arial", "12", "bold"))
aText.grid()

aEntry.bind("<FocusOut>", analyze)

lord.mainloop()
将Tkinter作为tk导入
def分析(事件=无):
content=aEntry.get()
如果内容==“”:
输入(0,“默认值”)
lord=tk.tk()
A入口=传统入口(主入口)
网格()
aText=tk.Text(主字体=(“Arial”、“12”、“粗体”))
aText.grid()
aEntry.bind(“,analyze)
lord.mainloop()

验证命令
选项仅用于验证,不用于执行其他类型的操作。您看到的行为是记录在案的行为

根据报告:

。。。在validateCommand或invalidCommand中编辑条目小部件时,validate选项也将自身设置为none


(注意:tkinter只不过是tk的tcl实现的包装。因此,tcl/tk文档可以作为tkinter行为的最终指南)

感谢您为我提供相关信息。我可能应该多读一点tcl/tk,因为tkinter看起来很稀疏。谢谢,我遵循了这个方法来获得我想要的行为。
import Tkinter as tk

def analyze(event=None):
    content = aEntry.get()
    if content == "":
        aEntry.insert(0, "default")

lord = tk.Tk()

aEntry = tk.Entry(lord)
aEntry.grid()

aText = tk.Text(lord, font=("Arial", "12", "bold"))
aText.grid()

aEntry.bind("<FocusOut>", analyze)

lord.mainloop()