Почему Киви не пишет в TextArea

Я пробовал разные решения, но никто не работает. Это моя последняя попытка.

Когда сценарий включается в первый раз, попробуйте вывести в консоли "porco", но не записать в text.result Label, почему??? Перейти непосредственно к последней записи метки для загрузки завершена

import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from pytube import YouTube

class InputLink(GridLayout):
    def __init__(self, **kwargs):
        super(InputLink, self).__init__(**kwargs)
        self.rows = 4

        self.add_widget(Label(text="Link Youtube:"))
        self.link = TextInput(multiline=False)
        self.add_widget(self.link)

        self.result = Label(text="testo")
        self.add_widget(self.result)

        self.bottone1 = Button(text="Download")
        self.bottone1.bind(on_press=self.click1)
        self.add_widget(self.bottone1)

    def click1(self,btn):
        self.result.text = self.link.text
        yt = ""
        #print(yt.streams.filter(only_audio=True).all())
        try:
            yt = YouTube(self.link.text)
            self.result.text = "Avvio il download di "+self.link.text#<--WHY??
            print('porco')
        except Exception as e:
            self.result.text = "Errore 1"+str(e)
            return
        self.download(yt)
    def download(self,yt):
        try:
            yt.streams.filter(subtype='mp4').first().download()
            self.result.text = "Download completato!"
        except Exception as e:
            self.result.text = "Errore 2"+str(e)



class YoutubeApp(App):
    def build(self):
        return InputLink()
if __name__ == "__main__":
    YoutubeApp().run()

1 ответ

Решение

Обновленный текст не отображался, поскольку он загружается в том же фрейме.

Решение

  1. Заменить все вхождения yt с self.yt
  2. замещать self.download(yt) с Clock.schedule_once(self.download, 1)
  3. замещать download(self, yt) метод с download(self, dt)

отрывок

def click1(self, btn):
    self.result.text = self.link.text
    self.yt = ""
    # print(yt.streams.filter(only_audio=True).all())
    try:
        self.yt = YouTube(self.link.text)
        self.result.text = "Avvio il download di " + self.link.text  # <--WHY??
        print('porco')
    except Exception as e:
        self.result.text = "Errore 1" + str(e)
        return
    Clock.schedule_once(self.download, 1)

def download(self, dt):
    try:
        self.yt.streams.filter(subtype='mp4').first().download()
        self.result.text = "Download completato!"
    except Exception as e:
        self.result.text = "Errore 2" + str(e)

Выход

Img01 - Загрузка Img02 - загрузка завершена

Другие вопросы по тегам