создание класса для Radiobutton для Python GUI - PullRequest
0 голосов
/ 18 октября 2018

Здравствуйте, я новичок в python, и я только что закончил базовый курс Python, и сейчас я работаю над Python GUI, используя tkinter.Я столкнулся с задачей создать несколько radiobuttons, и я думал создать класс для этого, чтобы сделать его более простым. Оба кода приведены ниже. Рабочий код приведен ниже:

def radcall():
    radSel = radVar.get()
    if radSel ==1:
        win.configure(background=COLOR1)
    elif radSel == 2:
        win.configure(background=COLOR2)
    elif radSel == 3:
        win.configure(background=COLOR3)

#creating 3 radiobuttons
radVar=tk.IntVar()
rad1 = tk.Radiobutton(win, text =COLOR1, variable=radVar, value=1,
                        command=radcall)
rad1.grid(column=0,row=4)                       
rad2 = tk.Radiobutton(win, text = COLOR2, variable=radVar, value=2,
                        command=radcall)
rad2.grid(column=1,row=4)
rad3 = tk.Radiobutton(win, text = COLOR3, variable=radVar, value=3,
                        command=radcall)                        
rad3.grid(column=2,row=4)

обновление, которое я сделалв классе дано ниже:

  class radbut():

    def __init__(self,win,text,variable,value,col,ro):
        self.win=win
        self.text=text
        self.variable=variable
        self.value=value
        self.col=col
        self.ro=ro

    def configure(self):
        if self.variable==1:
            print("in if statement")
            self.win.configure(background=COLOR1)
            return tk.Radiobutton(self.win,self.text,self.variable,self.value).grid(column = self.col,row = self.ro)
        elif self.variable == 2:
            self.win.configure(background=COLOR2)
            return tk.Radiobutton(self.win,self.text,self.variable,self.value).grid(column = self.col,row = self.ro)
        elif self.variable == 3:
            self.win.configure(background=COLOR3)
            return tk.Radiobutton(self.win,self.text,self.variable,self.value).grid(column = self.col,row = self.ro)
cast = radbut(win,COLOR1,'BLUE',1,0,4)
cast.configure()

Теперь, когда я запускаю код, я не получаю никакой ошибки, но не вижу и radiobuttons, поэтому я хочу знать, возможно ли вообщесоздавать классы, как это .. и если да, то как мне нужно внести изменения

1 Ответ

0 голосов
/ 18 октября 2018

Вы создаете экземпляр cast с аргументом variable = 'BLUE'.Затем вы проверяете переменную на значения 1, 2 и 3. Поэтому ни один из операторов if не оценивается как True.

В операторах if вы устанавливаете цвет фона окна вместо создания функции, связанной с выбором кнопки.

Затем вы возвращаете созданную и привязанную к сетке Radiobutton.Но сетка всегда возвращает None.

Вот пример, где я рассматриваю весь массив радиокнопок как одну единицу, которая может быть объединена в сетку или упакована вместе.Все кнопки имеют одинаковую функцию обратного вызова, change(), которая читает выбор и соответственно устанавливает цвет bg.

from tkinter import *

win = Tk()
win.geometry('300x200+800+50')

colors = ['khaki', 'thistle', 'bisque']

class radbut(Frame):
    def __init__(self, master, colors, *args, **kwargs):
        Frame.__init__(self, master, *args, **kwargs)
        self.master = master
        self.colors = colors

        self.choice = IntVar()
        self.choice.set(0)

        # Using a loop to create all alternatives in the list: colors
        for index, color in enumerate(colors):
            b = Radiobutton(self, text=color, variable=self.choice,
                            value=index, command=self.change)
            b.grid(row=0, column=index)

    def change(self):
        self.master.config(bg=self.colors[self.choice.get()])
        print('change')

cast = radbut(win, colors)
cast.grid(row=4, column=0)

win.mainloop()
...