Kivy: Popup con barra de progreso
-
21-12-2019 - |
Pregunta
¿Es posible crear una ventana emergente con una barra de progreso "Mover"?
Aquí hay un ejemplo de lo que intenté, pero solo mostrará la ventana emergente después de que se complete el bucle.Me gustaría tenerlo visible mientras lo hacía.
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()
o debo usar hilos / un widget personalizado, si es así, ¿cómo implementaría eso?
¡Muchas gracias!
Solución
Su problema es que los bloques de bucle para el bucle no son solo la ventana emergente, sino también en su aplicación, se ejecuta en el mismo hilo que el evento de Kivy, por lo que Kivy no puede hacer nada hasta queEstá terminado.
En su lugar, debe ejecutar su bucle para en un hilo separado o romperlo en componentes más pequeños que se pueden programar con reloj.schedule_once o reloj.schedule_interval.Esto permitirá a Kivy realizar sus tareas normales entre ejecutar los bits de su código.