我有一个n Entry小部件列表.用户应该只能键入以下字符:"V","F","".如果用户键入其中一个字符,则焦点应从条目#x传递到条目#x + 1,否则焦点应保持原位(在条目#x上)并且应丢弃输入.
我无法丢弃错误的输入:如果用户按下与允许的键不同的键,则Entry字段获取该键,但命令.delete(0,END)不起作用,因为小部件本身没有然后记住按下的键.
我该怎么办?
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()
Run Code Online (Sandbox Code Playgroud)
您可以轻松地分解语句,以便根据键将其转换为其他形式.
该event.keysym部分在那里,所以你可以ALT-F4关闭应用程序当你在该小部件.如果你else: return 'break'那时它也将捕获所有其他击键.
这也是区分大小写的捕获.如果您想要不区分大小写,只需将其更改为event.char.upper()
使用validate和validatecommand选项,这将创建一个仅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()
Run Code Online (Sandbox Code Playgroud)
我没有文档参考;我在这里学到了这一点。
| 归档时间: |
|
| 查看次数: |
5348 次 |
| 最近记录: |