2017-09-23 62 views
1

所以我试图在选择某个单选按钮时更改此框架的背景。(Python)通过单选按钮更新背景python

我的框架是在一个类和功能的单选按钮或此类以外。 (这让我可以给他们打电话上的所有其他帧)。

的问题是,我得到以下错误,每当我选择一个单选按钮:

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

但是,将self内或configure时,它说self未定义。

我不是100%的时候使用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() 

就像我说的,我在何时或何地使用不自信100% self所以我主要是在试验的地方放它。

+0

是什么'Menu'确切地说,一个变量引用了一些实例? – PRMoureu

+0

@PRMoureu这是我正在研究的另一个框架!我把它换成了我想改变的选项,但是我得到了同样的错误。 – DavalliTV

+0

但是你想将新的背景应用到选项框架或另一个?它可能存储在控制器中? – PRMoureu

回答

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和​​中的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" 
+0

因此,如果我想跨越我的应用程序中的所有框架,我将在哪里定义这些属性?在每个单独的框架中,还是在框架控制器?你如何改变同一帧中其他小部件的背景? – DavalliTV

+0

我没有看到类,所以我不能分辨是否更容易使用控制器。它看起来是最高级的课程,并且一直都在生活,所以最好存储这种参数。现在难以刷新现有的小部件,您是否已经将它们存储在控制器中?另一个选项:您是否使用文件来存储配置? – PRMoureu

+0

不,我只有一个文件,我称每一帧为最高级别。这里是整个代码的pastebin链接(如果有帮助):https://pastebin.com/WGFb6ciY我不太清楚你的意思是控制器。 – DavalliTV