(Python)通过单选按钮python更新背景

时间:2017-09-23 16:53:17

标签: python tkinter self

所以当我选择某个单选按钮时,我试图改变这个帧的背景。

我的框架属于类和radiobuttons的功能,或者在此类之外。 (这是我可以在所有其他帧上调用它们。)

问题是每当我选择radiobutton时,我都会收到以下错误:

configure() missing 1 required positional argument: 'self'

但是,将self置于configureself时,表示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}}的时间或地点没有百分之百的信心,所以我主要在试验放置它的位置。

1 个答案:

答案 0 :(得分:2)

方法configure需要应用于实例,而不是基类。

要使其在Options级别工作,您可以将函数bgLightbgDark声明为类的方法:

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中定义属性foregroundcontroler,然后在需要时调用方法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"