Я пытаюсь использовать этот отличный ответ Брайана Oakley, но безрезультатно (https://stackoverflow.com/a/4140988/5060127) ...Tkinter со счётчиком диапазон проверка
Я хотел бы использовать тот же метод для проверки значений со счётчиком. Я определил from_ и значения для spinboxes, но пользователь все еще может набирать в них что-то больше ... он должен быть проверен, что только значения внутри диапазона from_-to могут быть введены пользователем, и только целые числа.
Вот код, который показывает, как далеко я получил ...
try:
from Tkinter import *
except ImportError:
from tkinter import *
class GUI:
def __init__(self):
# root window of the whole program
self.root = Tk()
self.root.title('ImageSound')
# registering validation command
vldt_ifnum_cmd = (self.root.register(self.ValidateIfNum),'%s', '%S')
# creating a spinbox
harm_count = Spinbox(self.root, from_=1, to=128, width=5, justify='right', validate='all', validatecommand=vldt_ifnum_cmd)
harm_count.delete(0,'end')
harm_count.insert(0,8)
harm_count.pack(padx=10, pady=10)
def ValidateIfNum(self, s, S):
# disallow anything but numbers
valid = S.isdigit()
if not valid:
self.root.bell()
return valid
if __name__ == '__main__':
mainwindow = GUI()
mainloop()
Но ваш метод 'ValidateIfNum' * не применяет эту проверку диапазона. – jonrsharpe
Проблема заключается в том, что виджет 'Spinbox' не предоставляет параметры' validate' и 'validatecommand'. Они принимаются, но (я думаю, это так), они игнорируются. – Tupteq
Но я настроил validatecommand точно, как Брайан положил его - используя .register ... См. Ссылку. Я хотел бы выяснить, почему .isdigit не делает то, что он должен делать, до того, как я продолжаю и выполняю проверку диапазона ... Пример Bryan работает, когда я меняю sw = '' valid = (S.lower() = = S) 'с' valid = S.isdigit() '... так почему же он не работает здесь? –