2014-12-23 2 views
1

У меня есть некоторые объекты, которые являются экземплярами одного и того же класса; каждый объект имеет (как один из его атрибутов) кнопку tkinter, и я хочу, чтобы каждая кнопка tkinter выполняла метод на объекте, к которому он принадлежит. Я не совсем уверен, как это сделать. Я пробовал возиться с лямбда-функциями и заменять «я» на «self_» в случае, когда tkinter уже передавал «я» команде кнопки, но ни одна из них не работала; Я новичок в занятиях и до сегодняшнего дня не сталкивался с лямбда-функциями, поэтому меня это не удивило. Пример кода ниже - пожалуйста, может кто-нибудь объяснить, как заставить его работать таким образом, который является простым, кратким и питоническим, или если такое решение не существует, то обеспечьте работу? Заранее спасибоМетод вызова кнопки 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

Единственная проблема с вашим кодом является то, что вам нужно называть grid_forget вместо forget.

Кроме того, код немного вводит в заблуждение - метод delete на самом деле ничего не удаляет, он просто удаляет его из представления. Виджеты все еще существуют и занимают память. Вы знаете об этом? Если вы действительно хотите удалить виджеты, вызовите метод destroy.

+0

О, Боже мой! Еще раз спасибо, и да, я изменю его, чтобы уничтожить. –

Смежные вопросы