- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
每当内容发生变化时,我想设置或清除 ttk.Entry
的 invalid
状态标志。我通过将 StringVar
连接到条目并在 trace()
回调中调用 state(['valid'])
或 state(['!invalid'])
。该标志由我的回调正确设置,但随后,只要焦点离开文本条目,它就会被清除!我该如何避免或解决这个问题?
我想设置或清除标志,因为我可以根据状态标志更改视觉样式。我不想禁止用户输入任何无效的内容;我希望他们可以自由地输入他们想要的任何内容,并立即查看它是否有效。我想专门使用 invalid
标志,而不是 alternate
标志,不仅因为 invalid
是更合乎逻辑的选择,还因为我'我已经将 alternate
标志用于其他用途。
我没有使用这个小部件的内置验证功能,因为根据 the Tk docs ,如果我在编辑文本时调用验证命令(-validate
等于 'keys'
或 'all'
),
The entry will be prevalidated prior to each edit ... If prevalidation fails, the edit is rejected.
就像我之前说的,我不想那样。我想要 -validate
等于 'none'
应该做什么:
validation will only occur when specifically requested by the
validate
widget command.
太好了,所以理论上我所要做的就是永远不要调用 validate()
。不幸的是,invalid
标志无论如何都会被清除。我可以在 Python 的交互模式下重现这种意外和不需要的行为:
>>> import tkinter as tk
>>> from tkinter import ttk
>>> win = tk.Tk()
>>> entry = ttk.Entry(win)
>>> entry.pack()
>>> entry['validate']
'none'
>>> entry.state()
()
>>> entry.state(['invalid'])
('!invalid',)
>>> entry.state()
('invalid',)
到目前为止,还不错。 (在此示例中我使用的是 Python 3,但我使用 Python 2 得到的结果相同。)现在我将焦点移到输入框和移出输入框,并且:
>>> entry.state()
()
为什么当 -validate
是 'none'
而不是 'focus'
或 'all'
?为了我的目的,我可以做些什么来使用 invalid
状态?
我在 Linux 上使用 Tcl/Tk 8.6 版的 Python 3.4.2 和 2.7.9 看到了同样的行为。
最佳答案
将您自己的绑定(bind)添加到 <FocusOut>
它会调用您的验证函数并重置状态。
这是一个完整的工作示例。如果条目小部件包含单词“无效”,则状态将更改为“无效”。然后您可以点击小部件以查看状态仍然无效:
try:
import Tkinter as tk
import ttk
except ImportError:
import tkinter as tk
from tkinter import ttk
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
# give invalid entries a red background
style = ttk.Style()
style.map("TEntry", background=[('invalid', "red")])
self.entryVar = tk.StringVar()
self.entry = ttk.Entry(self, textvariable=self.entryVar)
# this label will show the current state, updated
# every second.
self.label = tk.Label(self, anchor="w")
self.after_idle(self.updateLabel)
# layout the widgets
self.entry.pack(side="top", fill="x")
self.label.pack(side="bottom", fill="x")
# add trace on the variable to do custom validation
self.entryVar.trace("w", self.validate)
# set up bindings to also do the validation when we gain
# or lose focus
self.entry.bind("<FocusIn>", self.validate)
self.entry.bind("<FocusOut>", self.validate)
def updateLabel(self):
'''Display the current entry widget state'''
state = str(self.entry.state())
self.label.configure(text=state)
self.after(1000, self.updateLabel)
def validate(self, *args):
'''Validate the widget contents'''
value = self.entryVar.get()
if "invalid" in value:
self.entry.state(["invalid"])
else:
self.entry.state(["!invalid"])
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()
关于python - 如何确保我的 ttk.Entry 的无效状态在失去焦点时不被清除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30337351/
我有一个网站,我正在通过学校参加比赛,但我在清除 float 元素方面遇到了问题。 该网站托管在 http://www.serbinprinting.com/corey/development/
我有一个清除按钮,需要使用 JQuery 函数清除该按钮单击时的 TextBox 值(输入的)。 最佳答案 您只需将单击事件附加到按钮即可将输入元素的值设置为空。 $("#clearButton").
我们已经创建了一个保存到 CoreData 然后同步到 CloudKit 的 iOS 应用程序。在测试中,我们还没有找到一种方法来清除应用程序 iCloud 容器中的数据(用于用户私有(private
这是一个普遍的问题,也是我突然想到并且似乎有道理的问题。我看到很多人使用清除div 并且知道这有时不受欢迎,因为它是额外的标记。我最近开始使用 因为它接缝代表了它的实际用途。 当然都引用了:.clea
我有两个单选按钮。如果我检查第一个单选按钮下面的数据将填充在组合框中。之后我将检查另一个单选按钮,我想清除组合框值。 EmployeeTypes _ET = new EmployeeTypes(
我一直在玩 Canvas ,我正在尝试制作一个可以移动和跳跃的正方形,移动部分已经完成,但是跳跃部分有一个问题:每次跳跃时它都会跳得更快 here's a jsfiddle 这是代码: ///////
我该如何在 Dart 上做到这一点? 抓取tbody元素后,我想在其上调用empty(),但这似乎不存在: var el = query('#search_results_tbody'); el.em
我需要创建一个二维模拟,但是在设置新的“框架”时,旧的“框架”不会被清除。 我希望一些圆圈在竞技场中移动,并且每个循环都应删除旧圆圈并生成新圆圈。一切正常,但旧的没有被清除并且仍然可见,这就是我需要改
无论我使用set statusline将状态行更改为什么,我的状态行都不会改变。看起来像 ".vimrc" 39L, 578C
在 WPF 应用程序中,我有一个 ListView 绑定(bind)到我的 ViewModel 上的一个 ObservableCollection。 在应用程序运行期间,我需要删除并重新加载集合中的所
我有一个大型程序,一个带有图形的文本扭曲游戏。在我的代码中的某处,我使用 kbhit() 我执行此代码来清除我的输入缓冲区: while ((c = getchar()) != '\n' && c !
我正在将所有网站的页面加载到主索引页面中,并通过将 href 分成段并在主域名后使用 .hash 函数添加段来更新 URL 显示,如下所示: $('a').click(function(event)
我有一个带有 的表单和 2 控件来保存和重置表单。我正在触发 使用 javascript __doPostBack()函数并在其中传递一个值 __EVENTARGUMENT如果面板应该重置。 我的代
我目前有一堆 UIViewController,每个都是在前一个之上呈现的模式 ViewController。我的问题是我不需要一堆 UIViewController,我只需要最后一个。因此,当出现新
我在一个类中有一些属性方法,我想在某个时候清除这个属性的缓存。 示例: class Test(): def __init__(self): pass @property
在此Test Link我试图将标题和主站点导航安装到博客脚本的顶部。 我清除:两者;在主要网站脚本上工作,但现在把所有东西都扔到了一边。尝试了无数次 fixex 都没有成功!提前感谢 Ant 指点解决
我似乎无法正确清除布局。看this 我无法阻止左栏中的元素向下推右栏中的元素。谁能帮忙? Screenshot with some pointy arrows (死链接) 最佳答案 问题标记/样式似
我希望能够在某个类 (sprite-empos) 之后清除 '' 中的内容,想知道是否有不添加任何新类或不使用 js 的方法(我在下面尝试过不工作)? 为了明确它是“985”,我想在某个视口(view
我想清除ptr_array boost::ptr_array a; ... a.clear(); // missing 如何清理 ptr 容器? 最佳答案 它应该表现得像一个数组,您不能在 C++
这是我使用多 map 制作的一个简单的事件系统;当我使用 CEvents::Add(..) 方法时,它应该插入并进入多重映射。问题是,当我触发这些事件时, multimap 似乎是空的。我确定我没有调
我是一名优秀的程序员,十分优秀!