为什么kivy无法写入TextA

2024-10-02 14:21:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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

当脚本加入第一次尝试在控制台“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()

Tags: textfromimportselfadddownloaddeflink
1条回答
网友
1楼 · 发布于 2024-10-02 14:21:07

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

解决方案

  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 - DownloadingImg02 - Download completed

相关问题 更多 >