我想获得 Entrybox 和 Checkbutton 的价值,但我什么也得不到,为什么? (我是 tkinter 的新手)
I want to get value of Entrybox and Checkbutton but I get nothing why? (I am new to tkinter)
我想获取 Entrybox 和 Checkbutton 的值,但我什么也得不到,为什么? (我是 tkinter 的新手)
from tkinter import *
def m1():
m1 = Tk()
entry_val = StringVar()
check_val = IntVar()
Entry(m1, textvariable=entry_val).pack()
Checkbutton(m1, text='CheckButton', variable=check_val).pack()
def show():
print(entry_val.get())
print(check_val.get())
Button(m1, text='click!', command=show).pack()
m1.mainloop()
def main():
main = Tk()
Button(main, text='click! (main)', command=m1).pack()
main.mainloop()
main()
简短的答案:
在您的代码中,您需要将 m1 = Tk()
更改为 m1 = Toplevel()
。这将解决您的问题。
长答案:
在编写 Tkinter GUI 时,99.99% 的时间你只会使用 1 个 tkinter 实例 Tk()
。这样做的原因是 Tk()
的每个实例都包含在其自己的 "Sandbox" 中。这意味着它不能和其他人一起玩。因此 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 中创建新 windows 而设计,因此所有内容都可以保持相同 "Sandbox" 并协同工作。
我想获取 Entrybox 和 Checkbutton 的值,但我什么也得不到,为什么? (我是 tkinter 的新手)
from tkinter import *
def m1():
m1 = Tk()
entry_val = StringVar()
check_val = IntVar()
Entry(m1, textvariable=entry_val).pack()
Checkbutton(m1, text='CheckButton', variable=check_val).pack()
def show():
print(entry_val.get())
print(check_val.get())
Button(m1, text='click!', command=show).pack()
m1.mainloop()
def main():
main = Tk()
Button(main, text='click! (main)', command=m1).pack()
main.mainloop()
main()
简短的答案:
在您的代码中,您需要将 m1 = Tk()
更改为 m1 = Toplevel()
。这将解决您的问题。
长答案:
在编写 Tkinter GUI 时,99.99% 的时间你只会使用 1 个 tkinter 实例 Tk()
。这样做的原因是 Tk()
的每个实例都包含在其自己的 "Sandbox" 中。这意味着它不能和其他人一起玩。因此 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 中创建新 windows 而设计,因此所有内容都可以保持相同 "Sandbox" 并协同工作。