kivy:带有进度条的弹出窗口
Posted
技术标签:
【中文标题】kivy:带有进度条的弹出窗口【英文标题】:kivy: popup with progress bar 【发布时间】:2014-09-23 05:59:31 【问题描述】:是否可以创建带有“移动”进度条的弹出窗口?
这是我尝试过的一个示例,但它只会在循环完成后显示弹出窗口。我希望在执行此操作时使其可见。
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()
或者我应该使用线程/自定义小部件,如果是,我将如何实现?
非常感谢!
【问题讨论】:
【参考方案1】:您的问题是,for 循环不仅会阻塞弹出窗口,还会阻塞应用程序中的 所有内容 - 它与 kivy 的事件循环在同一个线程中运行,因此 kivy 不能做任何事情,直到完成了。
您应该改为在单独的线程中运行您的 for 循环,或者将其分解为更小的组件,这些组件可以使用 Clock.schedule_once 或 Clock.schedule_interval 进行调度。这将让 kivy 在运行代码之间执行其正常任务。
【讨论】:
以上是关于kivy:带有进度条的弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章