你好,我是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
,所以我想知道是否甚至可以创建这样的类..如果是,那么我需要怎么做
答案 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()