Почему Киви не пишет в TextArea - PullRequest
0 голосов
/ 05 октября 2018

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

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

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 Ответ

0 голосов
/ 05 октября 2018

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

Решение

  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 - Downloading Img02 - Download completed

...