如何让Tkinter复选框独立工作并默认选中

0 投票
1 回答
1720 浏览
提问于 2025-04-18 09:07

我正在尝试制作一系列可以选择或不选择的复选框,然后当用户按下按钮时,分配给这些复选框的字母应该被添加到一个输入的字符串中,并且打印出来。

我遇到了两个主要问题:

  1. 当用户点击一个复选框时,所有的复选框都被选中了。

  2. 我希望默认情况下所有复选框都是选中的,但我找不到怎么做到这一点。如果这个问题无法解决,那就没有第一个问题那么重要,所以没关系。

这是我目前的代码:

import Tkinter

class MENU():

def __init__(self,NewData):
    self.SCREEN = Tkinter.Tk()
    self.NewData = NewData
    self.Selection = {"A":1,"B":1,"C":1,"D":1}     
    self.A = Tkinter.Checkbutton(self.SCREEN,text="A",variable=self.Selection["A"]).pack()
    self.B = Tkinter.Checkbutton(self.SCREEN,text="B",variable=self.Selection["B"]).pack()
    self.C = Tkinter.Checkbutton(self.SCREEN,text="C",variable=self.Selection["C"]).pack()
    self.D = Tkinter.Checkbutton(self.SCREEN,text="D",variable=self.Selection["D"]).pack()

    self.BtnFinish = Tkinter.Button(self.SCREEN,text="Finish selection",command=self.FinishSelection)
    self.BtnFinish.pack()

    self.SCREEN.mainloop()

def FinishSelection(self):
    SelectionString = ""
    for n in self.Selection:
        if self.Selection[n]:
            SelectionString+=n
    self.NewData+="\nQuestions\n"+SelectionString+"\n"
    print self.NewData

MENU("")

如果这有什么关系的话,我是在使用Python 2.7.3。此外,感谢大家,也很抱歉让你们指出一些非常明显或基础的东西,作为Tkinter的初学者,我还没有意识到这些。

1 个回答

1

你必须使用 Tkinter 提供的几个特殊对象,比如 StringVarIntVarBooleanVarDoubleVar,来作为 variable 参数的值。你不能直接用普通的 Python 变量。每个变量都需要单独创建。

举个例子:

self.Selection = {"A": Tkinter.BoolVar(), "B": Tkinter.BoolVar(), ...}
self.Selection["A"].set(True)
...

然后,要获取这个值,你需要使用 get 方法:

value = self.Selection["A"].get()

撰写回答