Как передавать значения в реальном времени между классамиPython

Программы на Python
Anonymous
Как передавать значения в реальном времени между классами

Сообщение Anonymous »

Я пытаюсь использовать набор библиотек для создания простого приложения для загрузки видео с YouTube, но в то же время я изучаю Python.
Мой Проблема в том, что я создаю компоненты в классах, и мне нужен второй класс, чтобы иметь доступ к некоторым данным в реальном времени. Сначала он загружает его, но когда значения изменяются в первом классе, он не обновляется во втором.
Я пробовал передавать значения непосредственно со своей страницы. Добавить (), но это работало так же.
Это мой код:

Код: Выделить всё

from yt_dlp import YoutubeDL
import flet as ft
import func

class ID_Section(ft.Column):
def __init__(self):
super().__init__()
self.horizontal_alignment = ft.CrossAxisAlignment.CENTER

self.valid_id = False

self.txt_video_id = ft.TextField(
label='Cole o ID do vídeo/short/playlist aqui...', on_change=self.make_invalid
)
self.bt_validate_id = ft.ElevatedButton(text="Validar", on_click=self.validate)
self.txt_id_status = ft.Text('Insira uma ID para começar!', size=14, color='yellow')

self.controls = [
ft.Row([
self.txt_video_id,
self.bt_validate_id,
],
ft.MainAxisAlignment.CENTER
),
self.txt_id_status,
]

def check_id(self, e):
if self.valid_id:
self.txt_id_status.value='ID válida!'
self.txt_id_status.color='green'
elif self.txt_video_id.value== '':
self.txt_id_status.value='Insira uma ID para começar!'
self.txt_id_status.color='yellow'
else:
self.txt_id_status.value='Insira uma ID válida!'
self.txt_id_status.color='red'

def make_invalid(self, e):
self.valid_id = False
self.check_id(e)
self.update()

def validate(self, e):
if self.txt_video_id.value != '':
self.valid_id = func.link_validation(self.txt_video_id.value)
self.check_id(e)
self.update()

class Download_Section(ft.Column):
def __init__(self):
super().__init__()
self.horizontal_alignment = ft.CrossAxisAlignment.CENTER

self.valid = ID_Section().valid_id
self.vid_id = ID_Section().txt_video_id.value

self.btn_download = ft.CupertinoFilledButton(
content=ft.Text("Baixar"),
disabled_color='yellow',
on_click=self.download_vid
)

self.controls = [
ft.Row(),
self.btn_download,
]

def download_vid(self, e):
print(self.valid)
print(self.vid_id)

def main(page: ft.Page):
page.title = 'YouTube Downloader'
page.vertical_alignment = ft.MainAxisAlignment.CENTER
page.horizontal_alignment = ft.CrossAxisAlignment.CENTER

valid = ID_Section().valid_id

page.add(
ft.Text('YouTube Downloader', size=28),
ft.Row(height=20),
ID_Section(),
Download_Section()
)

ft.app(main)
Класс ID_Section принимает идентификатор YouTube (видео, плейлист или короткий ролик) и проверяет его. Я хочу иметь возможность иметь этот self.valid_id (логическое значение) и self.txt_video_id (идентификатор в текстовом поле) во втором классе Download_Section .
Он работает, когда начинается приложение, и печатает значения, но как только я меняю в приложении, оно остается таким же, как в начале.

Подробнее здесь: https://stackoverflow.com/questions/787 ... en-classes

Вернуться в «Python»