默认复选按钮选中状态为真

0 投票
1 回答
1330 浏览
提问于 2025-04-18 01:14

我想把复选框的初始状态设置为“选中”

在我的图形界面中,有一段代码可以正常工作

testFrame = Frame(bigFrame)
testFrame.pack(fill=BOTH)
testLabel = Label(testFrame,
         text="Start from previously saved bias point?")
testLabel.pack(side=LEFT)
testChckbttn = Checkbutton(testFrame)
testChckbttn.pack(side=LEFT)
testchckbttn.select()

但是,当我引入一个变量“testvar”后,它就不再工作了。也就是说,复选框在开始时还是没有被选中。

testFrame = Frame(bigFrame)
testFrame.pack(fill=BOTH)
testLabel = Label(testFrame,
         text="Start from previously saved bias point?")
testLabel.pack(side=LEFT)
testvar = IntVar()
testChckbttn = Checkbutton(testFrame, variable=testvar)
testChckbttn.pack(side=LEFT)
testchckbttn.select()

是“testvar”搞乱了.select()吗?有没有办法确保复选框默认是选中的?

[编辑] - 我已经删除了不完整的代码。这是我用来重现错误的最简单完整代码。也就是说,这段代码应该产生一个默认选中的复选框,但实际上它是未选中的。

from Tkinter import Frame, Tk, Button, BOTH, LEFT, Label, \
                    Checkbutton, IntVar

class GUI(Frame):

    def __init__(self,parent):
        Frame.__init__(self,parent)

        self.parent = parent

        self.initUI()


    def initUI(self):
        self.parent.title("Test")
        self.pack(fill=BOTH,expand=1)

        bigFrame = Frame(self)
        bigFrame.pack(fill=BOTH,expand=1)

        testFrame = Frame(bigFrame)
        testFrame.pack(fill=BOTH)
        testLabel = Label(testFrame,
                                  text="Test")
        testLabel.pack(side=LEFT)
        testvar = IntVar()
        testChckbttn = Checkbutton(testFrame,variable=testvar)
        testChckbttn.pack(side=LEFT)
        testChckbttn.select()


def main():
    root = Tk()
    app = GUI(root)
    root.mainloop()

if __name__ == '__main__':
    main()

1 个回答

2

最好的解决办法是把 testvar 变成一个实例变量:

self.testvar = IntVar()
testChckbttn = Checkbutton(testFrame,variable=self.testvar)
testChckbttn.pack(side=LEFT)
testChckbttn.select()

现在,testvar 在调用 select() 时会被更新(也就是说,调用 print testvar.get() 在 select() 之后会打印出 1),但不知为什么 testChckbttn 这个对象没有明显更新。

把它变成实例变量从长远来看会更有帮助,因为这样它就可以在这个类的其他方法中使用,而在 initUI 方法中可能用处不大。

撰写回答