Удаление виджетов (с использованием модуля tkinter) - PullRequest
1 голос
/ 25 ноября 2011

новый парень здесь, и я медленно знакомлюсь с питоном, но у меня есть вопрос.

У меня здесь два файла

один назван first_file.py

from other_file import GameFrame
from Tkinter import Tk

def main():
    tk = Tk()
    tk.title("Game of Life Simulator")
    tk.geometry("380x580")
    GameFrame(tk)
    tk.mainloop()
main()

а другой - other_file.py

from Tkinter import *
from tkFileDialog import *

class GameFrame (Frame):
    def __init__(self, root):
        Frame.__init__(self,root)
        self.grid()
        self.mychosenattribute=8 
        self.create_widgets()

    def create_widgets(self):
        for rows in range(1,21):
            for columns in range(1,21):
                self.columns = columns
                self.rows = rows
                self.cell = Button(self, text='X')
                self.cell.bind("<Button-1>", self.toggle)
                self.cell.grid(row=self.rows, column=self.columns)

    reset = Button(self, text="Reset")
    reset.bind("<Button-1>", self.reset_button)
    reset.grid(row=22, column = 3, columnspan=5)

    def reset_button(self, event):
        self.cell.destroy()
        for rows in range(1,21):
               for columns in range(1,21):
                   self.columns = columns
                   self.rows = rows
                   self.cell = Button(self, text='')
                   self.cell.bind("<Button-1>", self.toggle)
                   self.cell.grid(row=self.rows, column=self.columns)

После того, как я нажимаю кнопку сброса, происходит то, что прямо сейчас одна кнопка уничтожается, а другой набор кнопок создается поверх уже существующих кнопок, но мне нужно иметь возможность уничтожить или хотя бы настроить все кнопки, чтобы они были пустыми. Итак, как бы я сделал это для всех кнопок, так как я использовал цикл for для их генерации? (Есть ли лучший способ создания кнопок, кроме использования цикла for?) Спасибо.

1 Ответ

1 голос
/ 26 ноября 2011

Распространенным методом является сохранение ваших объектов в списке (или словаре) для доступа к ним при необходимости. Простой пример:

self.mybuttons = defaultdict(list)
for rows in range(1,21):
    for columns in range(1,21):
        self.mybuttons[rows].append(Button(self, text=''))

Тогда вы можете получить кнопки следующим образом:

abutton = self.mybuttons[arow][acolumn]

Существуют некоторые проблемы с вашим кодом, которые мешают его выполнению (отступ строк reset и использование неопределенного self.toggle), поэтому я не мог это исправить, но этого примера должно быть достаточно для вас это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...