首页 > 解决方案 > 为什么kivy不写TextArea

问题描述

我尝试了不同的解决方案,但没有一个有效。这是我最后一次尝试。

当脚本加入第一次尝试在控制台“porco”中打印但没有写入 text.result 标签时,为什么?它直接跳到最后一个标签写入完成下载

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()

标签: pythonkivykivy-languagepytube

解决方案


它没有显示更新的文本,因为它正在同一帧中下载。

解决方案

  1. 将所有出现的 替换ytself.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 - 下载完成


推荐阅读