为python gui为Radiobutton创建一个类

时间:2018-10-18 16:50:30

标签: python-3.x tkinter inner-classes

你好,我是python的新手,我刚刚完成了基本的python课程,现在我正在使用tkinter在python GUI上工作。我遇到了创建多个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 :(得分:0)

您使用参数cast创建实例variable = 'BLUE'。然后,测试变量的值1、2和3。因此,所有if语句都不会得出True。

在if语句中,您设置窗口背景颜色,而不是创建与选择按钮相关联的函数。

然后返回创建并网格化的单选按钮。但是网格始终返回无。

在此示例中,我将整个单选按钮阵列视为一个可以网格化或打包在一起的单元。所有按钮都具有相同的回调函数change(),该函数读取选择并相应地设置背景色。

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()