简短的回答:
在您的代码中,您需要更改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 中创建新窗口而设计,因此一切都可以留在同一个“沙箱”中并一起工作。