【问题标题】:How to get values of checkbuttons from for loop tkinter python如何从for循环tkinter python中获取检查按钮的值
【发布时间】:2023-03-18 11:46:01
【问题描述】:

我是 tkinter 编程新手,我非常坚持使用检查按钮。我一口气创建了多个复选按钮,每个复选按钮都有不同的文本和不同的网格位置。但是我不知道如何获取每个按钮的值或如何设置它。我希望能够获取每个按钮的状态/值,如果选中,则调用另一个函数。如何设置和调用每个按钮的值/状态?这可以在 for 循环中完成还是我必须单独创建它们?

    def CheckIfValid(self, window):
        Class = self.ClassChosen.get()
        Unit = self.UnitChosen.get()
        Topic = self.TopicChosen.get()
        if Class == '' or Unit == '' or Topic == '':
            tm.showinfo("Error", "Please fill in all boxes")

        else:
            QuestionData = OpenFile()
            QuestionsList = []
            for x in range (len(QuestionData)):
                #if QuestionData[x][2] == Topic:
                    QuestionsList.append(QuestionData[x][0])


            for y in range(len(QuestionsList)):
                self.ButtonVal[y] = IntVar()
                Checkbutton(window, text = QuestionsList[y], padx = 20, variable = self.ButtonVal[y]).grid(row = 12 + y, column = 2)
            ConfirmSelection = Button(window, text = "Set Homework", command = lambda: SetHomeworkClass.ConfirmHomework(self)).grid()
            print(variable.get()) #here I would like to be able to get the value of all checkbuttons but don't know how

【问题讨论】:

标签: python loops for-loop tkinter


【解决方案1】:

您可以使用从 Checkbutton 或 Button 中的 command= 调用的 IntVar 列表。不知道为什么要调用另一个类的对象,SetHomeworkClass.objectConfirmHomework(self)。它看起来不像你编程的那样工作,因为那是另一个命名空间,IntVars 列表在这个命名空间中,但这是另一个线程的另一个主题。

try:
    import Tkinter as tk     # Python2
except ImportError:
    import tkinter as tk     # Python3

def cb_checked():
    # remove text from label
    label['text'] = ''
    for ctr, int_var in enumerate(cb_intvar):
        if int_var.get():     ## IntVar not zero==checked
            label['text'] += '%s is checked' % cb_list[ctr] + '\n'

root = tk.Tk()

cb_list = [
'apple',
'orange',
'banana',
'pear',
'apricot'
]

# list of IntVar for each button
cb_intvar = []
for this_row, text in enumerate(cb_list):
    cb_intvar.append(tk.IntVar())
    tk.Checkbutton(root, text=text, variable=cb_intvar[-1],
                   command=cb_checked).grid(row=this_row,
                   column=0, sticky='w')

label = tk.Label(root, width=20)
label.grid(row=20, column=0, sticky='w')

# you can preset check buttons (1=checked, 0=unchecked)
cb_intvar[3].set(1)
# show what is initially checked
cb_checked()

root.mainloop()

【讨论】:

    猜你喜欢
    • 2012-04-22
    • 1970-01-01
    • 2023-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    相关资源
    最近更新 更多