Мой Проблема в том, что я создаю компоненты в классах, и мне нужен второй класс, чтобы иметь доступ к некоторым данным в реальном времени. Сначала он загружает его, но когда значения изменяются в первом классе, он не обновляется во втором.
Я пробовал передавать значения непосредственно со своей страницы. Добавить (), но это работало так же.
Это мой код:
Код: Выделить всё
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)
Он работает, когда начинается приложение, и печатает значения, но как только я меняю в приложении, оно остается таким же, как в начале.
Подробнее здесь: https://stackoverflow.com/questions/787 ... en-classes