2017-09-23 59 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