2017-09-23 16 views
1

그래서 특정 라디오 버튼을 선택하면이 프레임의 배경을 변경하려고합니다.(Python) 라디오 버튼을 사용하여 배경 업데이트 python

내 프레임은 라디오 버튼 또는이 클래스 외부의 클래스 및 기능에 있습니다. (이것은 내가 다른 모든 프레임에 그들을 호출 할 수 있도록합니다.)

문제는 내가 라디오 버튼 선택할 때마다 나는 다음과 같은 오류를 얻을 수 있습니다 : 그러나

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

를 내부 또는 configureself을 배치 할 때, self이 정의되어 있지 않습니다.

self을 사용할 때 100 %가 아니므로 도움이 필요합니다. 라디오 버튼에 대한

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 메서드는 기본 클래스가 아닌 인스턴스에 적용해야합니다.

당신이 클래스의 메서드로 기능 bgLightbgDark을 선언 할 수 있습니다, 그것은 Options 클래스 수준에서 작동하게하려면

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) 

응용 프로그램 수준에서이를 처리하는 방법은 속성을 정의 할 수 있습니다. backgroundforegroundcontroler에 입력 한 다음 필요에 따라 controler에서 매개 변수를 지정하여 configure 메서드를 호출하십시오. 일부 위젯에는 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