Как передать список из одного класса в другой?
В виджете Label класса Text необходимо указать принадлежность к фрейму, который создается в класса Frames, значение, а точнее список фреймов, с параметрами, сохраняются в список self.List_frames, требуется передать этот список в класс Text, а затем указать в виджете Label принадлежность к одному из фреймов в списке, обратившись к нему по индексу, как лучше всего это реализовать?
from tkinter import *
import tkinter as tk
root = Tk()
root.title('Python')
root.geometry('605x400')
root.resizable(width = False, height = False)
# Класс реализации фреймов
class Frames():
# Инициализация заданых параметров
def __init__(self, background_line, width_line, height_line):
self.background_line = background_line
self.width_line = width_line
self.height_line = height_line
# Лист фреймов
self.List_frames = []
# Лист имен фреймов
self.List_name_frames = ['One_line', 'Two_line', 'Three_line', 'Four_line', \
'Five_line', 'Six_line', 'Seven_line', 'Eight_line',\
'Nine_line', 'Ten_line']
# Создание фреймов, присвоение параметров к фреймам, запись фреймов в список
for name_line in self.List_name_frames:
name_line = Frame(root, background = self.background_line, \
width = self.width_line, height = self.height_line)
self.List_frames.append(name_line)
# Вызов созданных фреймов с параметрами на экран
for line in self.List_frames:
line.pack(anchor = W)
line.pack_propagate(False)
# Класс реализации текста
class Text():
def __init__(self, text, background_text, font_text, foreground_text, width_texts):
self.Pixel_Virtual = tk.PhotoImage(width = 1)
self.text = text
self.background_text = background_text
self.font_text = font_text
self.foreground_text = foreground_text
self.width_text = width_texts
# Создание текстового поля [День:]
Day = Label(image = self.Pixel_Virtual, text = self.text,
background = self.background_text, font = self.font_text,
foreground = self.foreground_text, width = self.width_text)
# Создаем обьект класса фреймов
# Параметры: цвет фона, ширина, высота
call_Frames = Frames('olivedrab', 605, 40)
# Создаем обьект класса текста
# Параметры: текст, цвет фона, стиль текста, цвет текста, ширина блока с текстом
call_Text = Text('День', 'green', 'Arial 12', 'black', 40)
root.mainloop()
Ответы (1 шт):
Автор решения: Анатолий Михеенко
→ Ссылка
Разобрался, нужно использовать переменную класса вместо переменной экземпляра
# Класс реализации фреймов
class Frames():
# Лист фреймов
List_frames = []
# Инициализация заданых параметров
def __init__(self, background_line, width_line, height_line):
self.background_line = background_line
self.width_line = width_line
self.height_line = height_line
# Функция текстового поля [День:]
def day(self):
Day = Label(Frames.List_frames[0], image = self.Pixel_Virtual, text = self.text,
background = self.background_text, font = self.font_text,
foreground = self.foreground_text, width = self.width_text,
height = self.height_texts)
Day.pack(side = LEFT, padx = 2, pady = 2)