如何创建一个按钮来保存 python 中复选按钮的状态?
How to create a button to save the state of a checkbutton in python?
我在 python 3 中使用 tkinter。
我的 GUI 上有一个复选按钮和按钮:
entercheck = Checkbutton(window1, variable = value)
entercheck.pack()
savebutton = Button(window1, width=5, height=2, command = savecheck)
savebutton.pack()
其中 value=IntVar()
。
我试图做到这一点,以便在单击时,按钮将复选按钮的状态保存到变量 status
。我试过:
def savecheck():
global status
status = value.get()
然而,无论复选框是否被选中,这总是导致状态(这是一个全局变量)等于 0。这是为什么?
我看过这个问题:Getting Tkinter Check Box State 这个方法似乎对他们有用?
编辑:
我创建了一个较小版本的程序来尝试让它工作,这次只是尝试输出 checkbutton 变量的值,但它仍然不起作用。这是完整的代码:
from tkinter import *
root=Tk()
def pressbttn1():
def savecheck():
print (value.get()) #outputs 0 no matter whether checked or not???
window1 = Tk()
value=IntVar()
entercheck = Checkbutton(window1, bg="white", variable = value)
entercheck.pack()
savebttn = Button(window1,text= "Save", command = savecheck)
savebttn.pack()
class Application(Frame):
def __init__(self, master):
super(Application, self).__init__(master)
self.grid()
self.create_widgits()
def create_widgits(self):
self.bttn1 = Button(self, text= "New Window", command = pressbttn1)
self.bttn1.pack()
#main
app=Application(root)
root.mainloop()
我不明白为什么上面的代码不起作用,而下面的代码却起作用:
from tkinter import *
master = Tk()
def var_states():
print(check.get())
check = IntVar()
Checkbutton(master, text="competition", variable=check).pack()
Button(master, text='Show', command=var_states).pack()
mainloop()
status
是 savecheck
函数的局部变量。将其设为全局,它将按预期工作。
status = 0
value = IntVar()
def savecheck():
global status
status = value.get()
entercheck = Checkbutton(self, variable = value)
entercheck.pack()
savebutton = Button(self, width=5, height=2, command = savecheck)
savebutton.pack()
老实说,我不是很清楚为什么你的程序不能运行,但是我有一个解决方案。
在您的 pressbttn1()
函数中,更改:
window1 = Tk()
至
window1 = Toplevel()
调用 Tk()
创建一个新根 window。调用 Toplevel()
会创建一个单独的顶级 window widget,它独立于根 window 而存在,但由相同的 window 管理器控制。一个应用程序可以有任意数量的它们。
有关 window 位经理的更多信息,请参阅 Toplevel Window Methods。
我在 python 3 中使用 tkinter。 我的 GUI 上有一个复选按钮和按钮:
entercheck = Checkbutton(window1, variable = value)
entercheck.pack()
savebutton = Button(window1, width=5, height=2, command = savecheck)
savebutton.pack()
其中 value=IntVar()
。
我试图做到这一点,以便在单击时,按钮将复选按钮的状态保存到变量 status
。我试过:
def savecheck():
global status
status = value.get()
然而,无论复选框是否被选中,这总是导致状态(这是一个全局变量)等于 0。这是为什么?
我看过这个问题:Getting Tkinter Check Box State 这个方法似乎对他们有用?
编辑:
我创建了一个较小版本的程序来尝试让它工作,这次只是尝试输出 checkbutton 变量的值,但它仍然不起作用。这是完整的代码:
from tkinter import *
root=Tk()
def pressbttn1():
def savecheck():
print (value.get()) #outputs 0 no matter whether checked or not???
window1 = Tk()
value=IntVar()
entercheck = Checkbutton(window1, bg="white", variable = value)
entercheck.pack()
savebttn = Button(window1,text= "Save", command = savecheck)
savebttn.pack()
class Application(Frame):
def __init__(self, master):
super(Application, self).__init__(master)
self.grid()
self.create_widgits()
def create_widgits(self):
self.bttn1 = Button(self, text= "New Window", command = pressbttn1)
self.bttn1.pack()
#main
app=Application(root)
root.mainloop()
我不明白为什么上面的代码不起作用,而下面的代码却起作用:
from tkinter import *
master = Tk()
def var_states():
print(check.get())
check = IntVar()
Checkbutton(master, text="competition", variable=check).pack()
Button(master, text='Show', command=var_states).pack()
mainloop()
status
是 savecheck
函数的局部变量。将其设为全局,它将按预期工作。
status = 0
value = IntVar()
def savecheck():
global status
status = value.get()
entercheck = Checkbutton(self, variable = value)
entercheck.pack()
savebutton = Button(self, width=5, height=2, command = savecheck)
savebutton.pack()
老实说,我不是很清楚为什么你的程序不能运行,但是我有一个解决方案。
在您的 pressbttn1()
函数中,更改:
window1 = Tk()
至
window1 = Toplevel()
调用 Tk()
创建一个新根 window。调用 Toplevel()
会创建一个单独的顶级 window widget,它独立于根 window 而存在,但由相同的 window 管理器控制。一个应用程序可以有任意数量的它们。
有关 window 位经理的更多信息,请参阅 Toplevel Window Methods。