Короткий и простой ответ:
В вашем коде вам нужно изменить m1 = Tk()
на m1 = Toplevel()
. Это решит вашу проблему.
Длинный ответ:
При написании графического интерфейса пользователя Tkinter 99,99% времени вы будете использовать только 1 экземпляр tkinter Tk()
. Причина этого заключается в том, что каждый экземпляр Tk()
содержится в своей собственной «Песочнице». То есть он не может играть с другими. Таким образом, один экземпляр Tk()
не может взаимодействовать с отдельным экземпляром Tk()
.
Насколько я понимаю, если вы не укажете, к какому экземпляру принадлежит метод в методе, он будет по умолчанию установлен на 1-й экземплярTk()
. Таким образом, созданные вами StringVar()
и IntVar()
не могут быть напечатаны, поскольку они принадлежат main
. Поскольку main
не может общаться с m1
, вы не можете обновить это значение.
Мы можем на самом деле проверить это, если вы измените:
entry_val = StringVar()
check_val = IntVar()
На:
entry_val = StringVar(m1)
check_val = IntVar(m1)
Вы увидите, что ваши переменные обновляются правильно.
Или, если вы измените m1 = Tk()
на m1 = Toplevel()
(правильное решение), вы увидите, что все работает как нужно.
Toplevel()
isспециально разработан для создания новых окон в tkinter, чтобы все могло оставаться в одной «песочнице» и работать вместе.