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!

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top