Tkinter - это многослойная вещь.Хотя вы используете его из Python, он фактически использует другой язык, Tcl, для управления графическим интерфейсом.
Вы получаете это сообщение об ошибке
AttributeError: 'NoneType' object has no attribute '_root'
, потому что вывы пытаетесь создать объект Tkinter перед запуском интерпретатора Tcl, что происходит, когда вы делаете root=Tk()
.
Так что вам нужно реорганизовать свой код так, чтобы
character = StringVar()
не выполнялся до того, как вы выполните root=Tk()
.
То, что character = StringVar()
исполняется при импорте screenvalue
.Вы могли бы просто переместить оператор импорта после root=Tk()
, но было бы намного лучше изменить screenvalue
, чтобы он не запускал код при импорте.
FWIW, character.set("4")
возвращает None
, так что нет особого смысла в том, чтобы функция возвращала это.Кроме того, нет смысла в функции обратного вызова, возвращающей полезное значение, поскольку вы не можете получить доступ к значению, возвращенному обратным вызовом.