Автоматическое переключение флажков на tkinter - PullRequest
0 голосов
/ 04 ноября 2018

Я хотел бы включить флажки (0, 2, 4) автоматически одним нажатием кнопки. У меня есть следующий код. По какой-то причине это не работает. Пожалуйста, помогите мне.

from tkinter import *

class Error(Frame):

    def Widgets(self):
        for i in range(len(self.X)):
            self.X[i] = Checkbutton(self, text="%d"%(i,))
            self.X[i].grid(row=i, sticky=W)
            self.X[i].configure(variable = ("var_%d"%(i,)))
        self.button = Button(self, text = "set", command = self.test)
        self.button.grid(row=5, sticky=W)

    def test(self):
        for i in range(len(self.X)):
            if i == 0 or i == 2 or i == 4:
                set (("var_%d"%(i,))) == 1         


    def __init__(self,initial):      
        super(Error,self).__init__(initial)
        self.X = [{},{},{},{},{}]
        self.grid()
        self.Widgets()

Window = Tk()
Tool = Error(Window)
Window.mainloop()

1 Ответ

0 голосов
/ 05 ноября 2018

Способ обработки флажков состоит в том, чтобы связать каждое поле с переменной, которая отражает, установлен флажок или нет.

Для массива флажков удобно хранить эти переменные в списке. Я бы сделал это, создав пустой список, а затем добавляю переменные.

В функции test() я использую перечисление в цикле for, поскольку это рекомендуемый способ создания индекса списка.

from tkinter import *

class Error(Frame):
    def __init__(self, master):      
        super(Error,self).__init__(master)
        self.box_list = []  # List to holld checbox variables
        self.grid()
        self.Widgets()

    def Widgets(self):
        for i in range(5):
            var = BooleanVar()  # Create variable to associate with box
            cb = Checkbutton(self, text="%d"%(i,))
            cb.grid(row=i, sticky=W)
            cb.configure(variable=var)
            self.box_list.append(var)   # Append checkbox variable to list
        self.button = Button(self, text = "set", command = self.test)
        self.button.grid(row=5, sticky=W)

    def test(self):
        for i, var in enumerate(self.box_list):
            if i == 0 or i == 2 or i == 4:
                var.set(True)        

Window = Tk()
Tool = Error(Window)
Window.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...