2017-02-18 5 views
0

OPC 접근법을 사용하고 상속을 배우려고하는 Python 2.11을 사용하여 Tkinter에 GUI를 작성합니다. ButtonField라는 자식 클래스를 작성했으며이 클래스는 tk.Button에서 상속받습니다. ButtonField 안에 나는 눌렀을 때 버튼의 색상과 텍스트를 변경하는 pressMe라는 메서드가 있습니다.버튼 위젯을 사용하여 Tkinter에서 적절한 상속 사용

나의 궁극적 인 목표는보다 깨끗하고 관리하기 쉬운 코드를 위해 ButtonField 클래스에 포함 된 GUI와 관련된 모든 메소드에 더 많은 버튼을 포함시키는 것입니다.

버튼을 누르면 화면에 "Press Me Method"텍스트가 표시되어 메소드가 작동하지만 버튼 위젯이 텍스트 나 배경색을 변경하지 않습니다.

import Tkinter as tk 

class MainWindow(tk.Frame): 
    def __init__(self, parent, *args, **kwargs): 
     tk.Frame.__init__(self, parent, *args, **kwargs) 
     self.parent = parent 

     self.olFrame = tk.LabelFrame(text = 'Initial Frame', bg = 'grey') 
     self.olFrame.grid(column = 0, row = 0, sticky = 'w') 

     self.simpleButton = ButtonField(self.olFrame, text = "Press Me",bg= "green" 
            ,command = ButtonField(self).pressMe) 
     self.simpleButton.grid(column = 0, row = 0) 

class ButtonField(tk.Button): 
    def __init__(self, parent, *args, **kwargs): 
     tk.Button.__init__(self, parent, *args, **kwargs) 
     self.parent = parent 

    def pressMe(self): 
     print "In Press Me Method" 
     self.configure(text = "Pressed Now", background = "yellow") 
     #self.parent.configure(self, text = "Pressed Now", background = "yellow") #returns TclError: unknow option "-text" 

root = tk.Tk() 
root.geometry('500x400') 
root.title('Test GUI') 
root.configure(background = "black") 

a = MainWindow(root) 
root.mainloop() 
+0

특정 버그에 대한 좋은 대답을 가지고 있지만 모든 것을 상속 받으려는 계획은 좋지 않습니다. 아이디어는 이미 존재하는 것보다 복잡한 코드로 만들 것입니다. 완전히 새로운 위젯을 만드는 경우가 아니라면 대부분의 tkinter 예제에서 볼 수있는 것처럼 구성 및 위임을 사용하십시오. – pvg

답변

0

코드 행 고려 : 그것은 정확히 당신이했던 것처럼 동일

self.simpleButton = ButtonField(..., command = ButtonField(self).pressMe) 

을 :

another_button = Button(self) 
self.simpleButton = ButtonField(..., command=another_button.pressMe) 

당신은 다른 버튼의 기능을 호출하기 때문에 보이지 않는 경우 변경 사항을 볼 수 없습니다. 버튼이 자신의 함수를 호출하게하려면 다음 두 단계로 수행해야합니다.

self.simpleButton = ButtonField(...) 
self.simpleButton.configure(command=self.simpleButton.pressMe) 
관련 문제