在GUI中创建两个复选框的问题

时间:2015-09-18 06:00:01

标签: python-3.x checkbox tkinter

我正在为学校做一个项目,但我被困在创建多个复选框的时候。我复制/粘贴了一些代码并乱用它,试图获得两个复选框,但我无法这样做。复选框使用相同的变量来勾选/取消勾选(我知道这一点)。我无法找到获取第二个变量的方法,以允许第二个复选框被勾选或取消勾选,具体取决于第一个是未勾选还是勾选。

from Tkinter import *

root = Tk()
root.title("Payroll")
root.resizable(width=FALSE, height=FALSE)
class App:
    def __init__(self,master):
        root.minsize(width=500, height=500)
        root.maxsize(width=500, height=500)
        self.var = IntVar()
        frame = Frame(master)
        frame.grid()
        f2 = Frame(master,width=200,height=100)
        f2.grid(row=0,column=1)
        btnSalary = Checkbutton(frame,text='Salary',variable=self.var,command=self.fx)
        btnWage = Checkbutton(frame,text='Wage',variable=self.var,command= self.fx)
        btnSalary.grid(row=0,column=0)
        btnWage.grid(row=2,column=0)
        msg1="Wage"
        self.v= Message(f2,text=msg1)
        msg2="Salary"
        self.v= Message(f2,text=msg2)
    def fx(self):
        if self.var.get():
            self.v.grid(column=1,row=0,sticky=N)
        else:
            self.v.grid_remove()
app = App(root)

root.mainloop()

1 个答案:

答案 0 :(得分:0)

Checkbuttons和Radiobutton具有非常具体的用例:

  • 当用户可以选中任何,任何或所有选项时,您将使用一个或多个检查按钮。检查按钮总是有两个值,onvalueoffvalue(通常为TrueFalse,回答问题&#34;是否已检查&#34;)。< / LI>
  • 当用户可以从一组选项中选择一个选项时,您将使用一个或多个 Radiobuttons

如果您的情况如此,您似乎希望用户选择 Salary Wage。如果是这样,您需要使用Radiobuttons,而不是Checkbuttons。使用Radiobuttons时,所有作为一个选项的选项必须使用相同的textvariable。这就是Tkinter知道它们作为一组工作的方式。此外,您必须为每个Radiobutton提供一个不同的值,这样当您获得该值时,您将知道选择了哪一个。

在您的情况下,小部件可能如下所示:

btnSalary = Radiobutton(..., variable=self.var,value="salary", ...)
btnWage = Radiobutton(...,variable=self.var, value="wage", ...)