Python 在Kivy中下载进度条
我正试图建立一个应用程序,下载一个文件,其进展可以在一个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
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%。您可以在那里创建文本输入并输出文本