2014-12-23 1 views
1

같은 클래스의 모든 인스턴스 인 일부 개체가 있습니다. 각 객체는 (하나의 속성으로) tkinter 버튼을 가지고 있으며, 각 tkinter 버튼이 그것이 속한 객체에 대한 메소드를 수행하기를 원합니다. 나는이 일을 어떻게해야하는지 잘 모릅니다. 나는 tkinter가 이미 버튼의 명령에 "self"를 넘겨주고있는 경우에 람다 함수를 수정하려고 시도했고 "self"를 "self_"로 바꾸었다. 저는 수업에 익숙하지 않고 오늘 전에 람다 함수를 접하지 않았으므로 놀라지 않았습니다. 예제 코드는 아래와 같습니다. 누군가가 간단하고 간결하며 파이썬적인 방식으로 작동하도록 만드는 방법을 설명해 주실 수 있습니까? 아니면 그런 해결책이 존재하지 않는다면 해결 방법을 제공 할 수 있습니까? 사전개체의 Tkinter 단추 호출 메서드

import tkinter as tk 
from tkinter import ttk 

class SpecialButton(): 

    def __init__(self, row): 

     self.button = ttk.Button(root, text="button", command=self.delete) 
     self.button.grid(row=row, column=1) 

     self.label = ttk.Label(root, text="label") 
     self.label.grid(row=row, column=2) 

    def delete(self): 

     self.button.forget() 
     self.label.forget() 
     #some other stuff 

root = tk.Tk() 

for row in range(3): 
    SpecialButton(row) 

root.mainloop() 

답변

2

코드 유일한 문제 감사는 forget 대신 grid_forget를 호출 할 필요가있다.

또한 코드는 약간의 오해의 소지가 있습니다. delete 메서드는 실제로 아무것도 삭제하지 않고 단지보기에서만 제거합니다. 위젯은 여전히 ​​존재하며 메모리를 차지합니다. 그 사실을 알고 있습니까? 참으로 위젯을 삭제하려면 destroy 메소드를 호출하십시오.

+0

오 주님! 다시 한 번 고마워, 그리고 나는 그것을 파괴하기 위해 바꿀 것이다. –