Этот код является фрагментом программы.Я попытался сделать систему, которая проверяет ввод, только если ввод - одно или несколько чисел (r "^ \ d + $").Но это не работает, я проверяю свою ссылку на книгу tkinter, но я не нашел ошибок.Я разработал его, используя функцию vcmd, которая передает значение («% P»), вызывая функцию, которая проверяет значение.Когда он запускает метод match модуля regex, если он соответствует значению в pattern, он получает True, в противном случае - False.Если «Ложь», я хочу, чтобы невидимый текст не отображался в виджете «Ввод», если «Истина», я хочу, чтобы числовой текст отображался в виджете «Ввод».Более того, он не запускает функцию invalidcommand, и я попытался узнать, сколько раз запускается проверяющая функция (только в первый раз).
import tkinter
import re as regex
from electronic_formulas import Electronic
class App(tkinter.Tk):
def __init__(self):
super().__init__()
self.var_r1 = tkinter.DoubleVar()
self.var_r2 = tkinter.DoubleVar()
self.pattern = regex.compile(r"^[0-9]+$")
vcmd = (self.register(self.validating_values), "%P")
self.frame_left = tkinter.Frame(self)
self.frame_left.pack(side=tkinter.LEFT)
self.frame_right = tkinter.Frame(self)
self.frame_right.pack(side=tkinter.RIGHT)
self.entry_r1 = tkinter.Entry(self.frame_left, textvariable=self.var_r1, validate="key",
validatecommand=vcmd, invalidcommand=lambda: print("Error"))
self.entry_r1.pack(side=tkinter.TOP)
self.entry_r2 = tkinter.Entry(self.frame_left, textvariable=self.var_r2, validate="key",
validatecommand=vcmd, invalidcommand=lambda: print("Error"))
self.entry_r2.pack(side=tkinter.TOP)
self.var_r1.set("")
self.var_r2.set("")
def validating_values(self, value):
return self.pattern.match(value) is not None
app = App()
if __name__ == "__main__":
app.mainloop()
Нет ошибок tcl.