Kivy:带有进度栏的弹出窗口
-
21-12-2019 - |
题
是否可以使用“移动”的ProgressBar?
创建一个弹出窗口这是我尝试的是一个例子,但它只会在循环完成后显示弹出窗口。我想在这样做时看起来可见。
import time
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.progressbar import ProgressBar
from kivy.uix.popup import Popup
databases = range(5)
class testApp(App):
def launch_popup(self, instance):
print("Button pressed for popup: {0}".format(instance))
import time
pb = ProgressBar() #100
popup = Popup(title='Syncing Databases', content=pb, size_hint=(0.7, 0.3))
popup.open()
for i in databases:
time.sleep(1) #simulate syncing database
pb.value += 100/len(databases)
print("Progressbar is on {0}%".format(pb.value))
def build(self):
btn = Button(text="Popup", on_press=self.launch_popup)
return btn
testApp().run()
.
或者我应该使用线程/自定义窗口小部件,如果是这样,我将如何实现?
非常感谢!
解决方案
你的问题是for循环阻止不仅仅是弹出窗口,而是所有在您的应用程序中 - 它在与Kivy的EventLoop中运行在同一线程中,因此Kivy根本不能做任何事情它结束了。
您应该在单独的线程中运行for循环,或者将其分解为可以使用clock.schedule_once或clock.schedule_interval计划的较小组件。这将让Kivy在运行代码的位之间执行其正常任务。
不隶属于 StackOverflow