Каков путь инициализации в объектно-ориентированном интерфейсе, который работает только с изображениями в tkinter?

#python #tkinter

Вопрос:

Это приложение должно уничтожить старую рамку, чтобы нарисовать новую.

В моем случае рамки являются контейнерами изображений, и я показываю их в 4 разных окнах, но в примере я показываю только одно в качестве примера, также каждый экземпляр from Img_1 to Img_60 имеет свои собственные виджеты, и у них есть свои собственные ссылки. Теперь у меня есть две проблемы, я надеюсь, что вы сможете мне помочь, пожалуйста.

  1. Когда дело доходит до уничтожения и рисования нового кадра, возникают конфликты из-за ссылок на предыдущий кадр, я думал о том, чтобы отключить их, но «»» не работает для меня, я немного грубый.
  2. Где я должен инициализировать изображения? [150], я задаю этот вопрос из-за проблемы с производительностью, так как заметил, что для открытия окна требуется много времени. Я ценю всех людей, которые нашли время, чтобы почитать, не имеет значения, если они мне не помогли. Спасибо.
 from tkinter import *

class Crtl(Frame):
    def__init__(self, master, **kwargs):
        super().__init__(master, **kwargs)
        self._frame_1 = None
        self._open_1 = False
        self.button1 = Button(self, text='pack 1',
                      command= lambda:self.windows(ImG)
        self.button1 .pack()

    def windows(self, var_1):
        if not self._open_1:
            self.top1 = Toplevel(self.master)
            self.top1 .geometry('200x200')
                                
        container = var_1(self.top1)

        if self._frame_1 is not None:  
            self._frame_1 .destroy()
        self._frame_1 = container
        self._frame_1 .pack()
        self._open_1 = True

class ImG(Frame):
    def__init__(self, master, **kwargs):
        super().__init__(master, **kwargs)
        self.img1 = PhotoImage(file= '60.png')
        self.lbl1 = Label(self, image=self.img1)

        self.master.bind("<Button-1>", self.img_2)

    def img_2(self):
        print('new image N°24')

root = Tk()
app = Ctrl(root, bg='black')
app .pack()
root .mainloop()
 


 

Комментарии:

1. Правильно ли я думаю, что у вас есть 60 различных классов, по одному для каждого изображения? Почему бы не передать имя изображения для создания экземпляра одного класса 60 раз, а не копировать код 60 раз?

2. Я бы создал экземпляр нового класса только тогда, когда нажата кнопка для перехода к этому изображению. Класс должен сохранять ссылку на то, какое изображение у него открыто в данный момент, чтобы он мог открыть следующее изображение при нажатии следующей кнопки. Например, если текущее изображение равно 50, то следующее будет 51.