Я проверял поля ввода с здесь . Приведенный ниже код взят из ответа с дополнительным условием: если введенное значение равно 'Q'
, программа добавляет 'test'
к началу значения Entry.
Однако, как только это значение вставлено, кажется, что вся проверка выходит за пределы окна, и Entry допускает значения в верхнем регистре. Некоторые тесты на моей программе показывают, что команда проверки (OnValidate
в данном случае) не вызывается при дальнейших событиях Entry (ключ, focusin / out и т. Д.).
import Tkinter as tk
class MyApp():
def __init__(self):
self.root = tk.Tk()
vcmd = (self.root.register(self.OnValidate),
'%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W')
self.entry = tk.Entry(self.root, validate="key",
validatecommand=vcmd)
self.entry.pack()
self.root.mainloop()
def OnValidate(self, d, i, P, s, S, v, V, W):
if S == "Q":
self.entry.insert(0,"test")
# only allow if the string is lowercase
return (S.lower() == S)
app=MyApp()
Причина, по которой я это делаю, заключается в том, что я хочу, чтобы запись отображала значение по умолчанию, если его значение остается пустым после любых изменений, внесенных пользователем. (т.е. мое состояние будет if not P
на фокусе)
Любые идеи о том, как реализовать это или что-то пошло не так, приветствуются.