我只需要将Entry小部件中的值限制为数字。我的实施方式是:
import numpy as np
from Tkinter import *;
import tkMessageBox;
class window2:
def __init__(self,master1):
self.panel2=Frame(master1)
self.panel2.grid()
self.button2=Button(self.panel2,text="Quit",command=self.panel2.quit)
self.button2.grid()
self.text1=Entry(self.panel2)
self.text1.grid()
self.text1.bind('<KeyPress>', self.keybind1)
self.text1.focus()
def keybind1 (self,event):
if event.int in np.linspace(0,9,10):
print event.int
root1=Tk()
window2(root1)
root1.mainloop()
我一直收到错误消息,事件实例没有“int”属性。我该怎么办?
答案几乎是完美的,只需添加一点就可以删除整个字符串。 只有在插入文本时才应检查浮动
我意识到这是一个很晚的答案,但我觉得我可以给这个更简单的答案。。。一旦你了解了它的工作原理,它就非常简单了。
使用
Entry
小部件附带的验证功能。假设
self
是一个小部件:您不需要包含所有的替换代码:(
'%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W'
),只需要您将要使用的代码。Entry
小部件返回一个字符串,因此您必须以某种方式提取任何数字,以便将它们与其他字符分开。最简单的方法是使用str.isdigit()
。这是一个内置在python库中的方便的小工具,不需要额外的导入,它将标识从Entry
小部件返回的字符串中找到的任何数字(数字)。if语句的
or P == ""
部分允许您删除整个条目,没有它,您将无法删除最后一个(条目框中的第一个)数字,因为'%P'
返回空值并导致回调返回False
。我不想详细说明为什么在这里。validate='all'
允许回调在您focusin
、focusout
或任何key
笔划更改小部件中的内容时计算P
的值,因此您不会为误入的散乱字符留下任何洞。总之,让事情变得简单。如果回调返回
True
,则允许输入数据。如果回调返回“False”,则实际上将“忽略”键盘输入。看看这两份推荐信。它们解释了每个替换代码的含义以及如何实现它们。
http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/entry-validation.htmlhttp://stupidpythonideas.blogspot.ca/2013/12/tkinter-validation.html
编辑: 这只会处理盒子里允许的东西。但是,您可以在回调函数中,将
P
的任何值添加到您希望的任何变量中。它使用
validatecommand
将tk.Entry
中的有效用户输入限制为可以解释为浮点的字符串:参考文献:
validate
和validatecommand
选项。(感谢schlenk的链接)。相关问题 更多 >
编程相关推荐