Python 如何在tkinter条目小部件中仅插入一些指定字符
我有一个n个条目小部件的列表。用户应只能键入以下字符:“V”、“F”和“”。如果用户键入其中一个字符,焦点应该从条目#x传递到条目#x+1,否则焦点应该保持在原来的位置(在条目#x上),输入应该被丢弃 我无法放弃错误的输入:如果用户按下的键与允许的键不同,则输入字段将获得该键,但命令.delete(0,END)不起作用,因为小部件本身尚未记住按下的键 我怎么办Python 如何在tkinter条目小部件中仅插入一些指定字符,python,tkinter,Python,Tkinter,我有一个n个条目小部件的列表。用户应只能键入以下字符:“V”、“F”和“”。如果用户键入其中一个字符,焦点应该从条目#x传递到条目#x+1,否则焦点应该保持在原来的位置(在条目#x上),输入应该被丢弃 我无法放弃错误的输入:如果用户按下的键与允许的键不同,则输入字段将获得该键,但命令.delete(0,END)不起作用,因为小部件本身尚未记住按下的键 我怎么办 将Tkinter作为tk导入 import Tkinter as tk def keyPress(event): if eve
将Tkinter作为tk导入
import Tkinter as tk
def keyPress(event):
if event.char in ('V', 'F', ' '):
print event.char
elif event.keysym not in ('Alt_r', 'Alt_L', 'F4'):
print event.keysym
return 'break'
root = tk.Tk()
entry = tk.Entry()
entry.bind('<KeyPress>', keyPress)
entry.pack()
entry.focus()
root.mainloop()
def按键(事件):
如果event.char位于('V','F','')中:
打印事件.char
elif event.keysym不在('Alt_r','Alt_L','F4'):
打印事件.keysym
返回“中断”
root=tk.tk()
entry=tk.entry()
条目绑定(“”,按键)
entry.pack()
entry.focus()
root.mainloop()
您可以很容易地分解语句,以便根据键将其转换为不同的形式
event.keysym
部分在那里,因此当您在该小部件中时,可以使用ALT-F4关闭应用程序。如果您只是else:返回'break'
,那么它也将捕获所有其他击键
这也是区分大小写的捕获。如果希望不区分大小写,只需将其更改为event.char.upper()
将Tkinter作为tk导入即可
def按键(事件):
如果event.char位于('V','F','')中:
打印事件.char
elif event.keysym不在('Alt_r','Alt_L','F4'):
打印事件.keysym
返回“中断”
root=tk.tk()
entry=tk.entry()
条目绑定(“”,按键)
entry.pack()
entry.focus()
root.mainloop()
您可以很容易地分解语句,以便根据键将其转换为不同的形式
event.keysym
部分在那里,因此当您在该小部件中时,可以使用ALT-F4关闭应用程序。如果您只是else:返回'break'
,那么它也将捕获所有其他击键
这也是区分大小写的捕获。如果希望不区分大小写,只需使用
验证和验证命令选项将其更改为事件.char.upper()
,这将创建一个tk.Entry
,它只接受'VF'
中的字符,但可以告诉您按下了哪个键以及当前条目的值:
import Tkinter as tk
def validate(char, entry_value):
if char in 'VF ':
print('entry value: {P}'.format(P = entry_value))
return True
else:
print('invalid: {s}'.format(s = char))
return False
root = tk.Tk()
vcmd = (root.register(validate), '%S', '%P')
entry = tk.Entry(root, validate = 'key', validatecommand = vcmd)
entry.pack()
entry.focus()
root.mainloop()
我没有文档参考;我了解到了这一点。使用验证
和验证命令
选项,这将创建一个tk.Entry
,它只接受'VF'
中的字符,但可以告诉您按下了哪个键以及当前条目的值:
import Tkinter as tk
def validate(char, entry_value):
if char in 'VF ':
print('entry value: {P}'.format(P = entry_value))
return True
else:
print('invalid: {s}'.format(s = char))
return False
root = tk.Tk()
vcmd = (root.register(validate), '%S', '%P')
entry = tk.Entry(root, validate = 'key', validatecommand = vcmd)
entry.pack()
entry.focus()
root.mainloop()
我没有文档参考;我学会了这一点。谢谢,我错过了“返回'中断'部分”。如果我在它前面插入另一条直线(即使是一条简单的打印语句),它也不起作用。@zar,不客气-返回“break”
是阻止Tkinter事件传播的方法(即按下按钮等)。实际上,我说的不是真的。如果在“break”之前我插入了另一行,该行在Entry小部件上调用.get()语句。那个电话把一切都搞砸了。再次感谢。我还有一个问题:如何获取输入字段的值?如果光标仍在输入字段上,像x=entry.get()这样的行不会给出正确的值。(我将作为单独的问题发布)谢谢,我缺少了“return'break'”部分。如果我在它前面插入另一条直线(即使是一条简单的打印语句),它也不起作用。@zar,不客气-返回“break”
是阻止Tkinter事件传播的方法(即按下按钮等)。实际上,我说的不是真的。如果在“break”之前我插入了另一行,该行在Entry小部件上调用.get()语句。那个电话把一切都搞砸了。再次感谢。我还有一个问题:如何获取输入字段的值?如果光标仍在输入字段上,则像x=entry.get()这样的行不会给出正确的值。(我将把它作为单独的问题发布)