Python 在Kivy中下载进度条

Python 在Kivy中下载进度条,python,kivy,python-3.4,urllib,Python,Kivy,Python 3.4,Urllib,我正试图建立一个应用程序,下载一个文件,其进展可以在一个kivy应用程序跟踪 我已经看了这个例子,并了解了下载进度。 这是我的代码: from kivy.app import App from kivy.uix.button import Button from kivy.uix.boxlayout import BoxLayout from kivy.uix.label import Label from kivy.uix.textinput import TextInput from kiv

我正试图建立一个应用程序,下载一个文件,其进展可以在一个kivy应用程序跟踪

我已经看了这个例子,并了解了下载进度。 这是我的代码:

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.popup import Popup
from kivy.factory import Factory
from kivy.properties import ObjectProperty
from kivy.clock import Clock
import urllib

URL = "http://s9.videozoo.me/S/saenai_heroine_no_sodatekata_flat_-_11.mp4?st=Ow7pwXbRt6vPWE-kr5Sn1A&e=1498847899&start=0"

class PopupBox(Popup):
    pop_up_text = ObjectProperty()

    def update_pop_up_text(self, p_message):
        self.pop_up_text.text = p_message


class MyApp(App):
    # layout
    def show_popup(self):
        self.pop_up = Factory.PopupBox()
        self.pop_up.update_pop_up_text('Running some task...')
        self.pop_up.open()

    def build(self):
        layout = BoxLayout(padding=10, orientation='vertical')
        btn1 = Button(text="OK")
        btn1.bind(on_press=self.buttonClicked)
        layout.add_widget(btn1)
        self.lbl1 = Label(text="test")
        layout.add_widget(self.lbl1)
        self.txt1 = TextInput(text='', multiline=False)
        layout.add_widget(self.txt1)
        return layout

    # button click function
    def buttonClicked(self, btn):
        self.lbl1.text = "You wrote " + self.txt1.text
        self.show_popup()

        self.download_file(URL)
        self.pop_up.dismiss()

    def download_file(self, url):
        u = urllib.request.urlopen(url)
        meta = u.info()
        metaInfo = str(meta).split()
        fileTotalbytes = int(metaInfo[46])

        data_blocks = []
        total = 0

        while True:
            block = u.read(1024)
            data_blocks.append(block)
            total += len(block)
            hash = ((60 * total) // fileTotalbytes)
            print("[{}{}] {}%".format('#' * hash, ' ' * (60 - hash), int(total / fileTotalbytes * 100)), end="\r")

            if not len(block):
                break
            data = b''.join(data_blocks)  # had to add b because I was joining bytes not strings
        u.close()

# run app
if __name__ == "__main__":
    MyApp().run()

但是,我不知道如何将下载文件功能与kivy小部件功能绑定以使其工作。如果您在主线程中阻塞kivy无法再更新GUI,如何适当修改打印功能,使其与小部件一起工作。而是创建一个新线程并使用来进行gui更新


而不是打印,你必须操纵kivy小部件。您可以创建一个矩形并将宽度增加到100%。您可以在那里创建文本输入并输出文本

如果在主线程中阻塞,kivy将无法再更新GUI。而是创建一个新线程并使用来进行gui更新

而不是打印,你必须操纵kivy小部件。您可以创建一个矩形并将宽度增加到100%。您可以在那里创建文本输入并输出文本