В настоящее время я изучаю основы tkinter и создаю небольшую суперпростую программу, чтобы проверить свои знания о некоторых из самых простых виджетов.
У меня проблема с проверкой и записью, возможно, из-за моего непонимания в этом вопросе ... Это вызывает три вопроса:
1 - Как сделать то, что было сделано здесь: https://stackoverflow.com/a/4140988/2828287 без класса часть. Просто делаю это, когда запускается скрипт.
2 - Что все это за себя. и сам там делаешь? Какие из них есть, потому что это класс, а какие есть из-за самого метода проверки?
3 - Что не так в моем коде? на основе этого объяснения >> http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/entry-validation.html
from tkinter import *
from tkinter import ttk
# function that should take the '%d' replacer and only validate if the user didn't delete
def isOkay(self, why):
if why == 0:
return False
else:
return True
okay = entry.register(isOkay) # didn't understand why I had to do this, but did it anyway...
entry = ttk.Entry(mainframe, validate="key", validatecommand=(okay, '%d'))
# the mainframe above is a ttk.Frame that contains all the widgets, and is the only child of the usual root [ = Tk()]
entry.grid(column=1,row=10) # already have lots of stuff on upper rows
Ошибка, которую я получаю, выглядит следующим образом: «NameError: имя 'entry' не определено» Я пытался изменить порядок вещей, но всегда есть одна из этих ошибок. Она указывает на строку, в которой я выполняю .register () материал
--EDITED CODE-- Это не вызывает у меня ошибки, но все же позволяет удалить ...
def isOkay(why):
if (why == 0):
return False
else:
return True
okay = (**root**.register(isOkay), "%d")
entry = ttk.Entry(mainframe, validate="key", validatecommand=okay)
entry.grid(column=1,row=10)
(где «корневая» часть написана между ** **, это должен быть корень? Или это может быть любой родительский элемент виджета, который будет его использовать? Или это должен быть непосредственный родительский элемент для него? например, у меня есть: root >> mainframe >> entry. Должен ли он быть root, mainframe или может быть и тем, и другим?)