所以当我选择某个单选按钮时,我试图改变这个帧的背景。
我的框架属于类和radiobuttons的功能,或者在此类之外。 (这是我可以在所有其他帧上调用它们。)
问题是每当我选择radiobutton时,我都会收到以下错误:
configure() missing 1 required positional argument: 'self'
但是,将self
置于configure
或self
时,表示self
未定义。
我不是百分之百地使用def bgLight():
Options.configure(self, bg="#fff")
Options.configure(self, fg="#000")
def bgDark():
Options.configure(bg="#000")
Options.configure(fg="#fff")
,所以任何帮助都会被提升。
更改背景的功能:
class Options(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
label = tk.Label(self, text="Options", font=TITLE_FONT)
label.pack(side="top", fill="x", pady=10)
label = tk.Label(self, text="Change it up a bit!", font=SUBTITLE_FONT)
label.pack(fill="x", pady=10)
#These are the two radio buttons that will change the background color
radio = tk.Radiobutton(self, text="One", value=1, command=bgLight)
radio.pack()
radio = tk.Radiobutton(self, text="Two", value=0, command=bgDark)
radio.pack()
button = tk.Button(self, text="Back To Main Menu",
command=lambda: controller.show_frame("Menu"))
button.pack()
单选按钮的代码:
self
就像我说的那样,我对使用{{1}}的时间或地点没有百分之百的信心,所以我主要在试验放置它的位置。
答案 0 :(得分:2)
方法configure
需要应用于实例,而不是基类。
要使其在Options
级别工作,您可以将函数bgLight
和bgDark
声明为类的方法:
def bgLight(self):
self.configure(bg="#fff")
#self.configure(fg="#000") no foreground on Frame
def bgDark(self):
self.configure(bg="#000")
#self.configure(fg="#fff")
请勿忘记更改Radiobutton
命令中的来电:
radio = tk.Radiobutton(self, text="One", value=1, command=self.bgLight)
radio = tk.Radiobutton(self, text="Two", value=0, command=self.bgDark)
在应用程序级别处理此问题的方法可能是在background
中定义属性foreground
和controler
,然后在需要时调用方法configure
,通过提供controler
的参数。
小心,一些小部件没有前景属性,如tkinter.Frame
。
在Options
中,方法可以是:
def bgLight(self):
self.controller.background = "#fff"
self.controller.foreground = "#000"
def bgDark(self):
self.controller.background = "#000"
self.controller.foreground = "#fff"