#python #tkinter
Вопрос:
Это приложение должно уничтожить старую рамку, чтобы нарисовать новую.
В моем случае рамки являются контейнерами изображений, и я показываю их в 4 разных окнах, но в примере я показываю только одно в качестве примера, также каждый экземпляр from Img_1
to Img_60
имеет свои собственные виджеты, и у них есть свои собственные ссылки. Теперь у меня есть две проблемы, я надеюсь, что вы сможете мне помочь, пожалуйста.
- Когда дело доходит до уничтожения и рисования нового кадра, возникают конфликты из-за ссылок на предыдущий кадр, я думал о том, чтобы отключить их, но «»» не работает для меня, я немного грубый.
- Где я должен инициализировать изображения? [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.