简短的回答:
在您的代码中,您需要更改m1 = Tk()
为m1 = Toplevel()
. 这将解决您的问题。
长答案:
在 99.99% 的情况下编写 Tkinter GUI 时,您只会使用 1 个 tkinter 实例Tk()
。这样做的原因是每个实例Tk()
都包含在其自己的个人“沙箱”中。这意味着它不能与其他人一起玩。因此,一个实例Tk()
无法与单独的Tk()
实例通信。
我的理解是,如果您没有在方法中指定方法属于哪个实例,那么它将默认为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()
专为在 tkinter 中创建新窗口而设计,因此一切都可以留在同一个“沙箱”中并一起工作。