es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo mostrar texto o ventana emergente en Kivy mientras se ejecuta un script de Python.

Hola a todos los que están leyendo este tema.

Lo que estoy intentando hacer es: mostrar automáticamente el texto en Label después de que el valor coincida en la instrucción if. La segunda opción podría ser Popup en lugar de Label. La tercera forma podría ser saltar a una pantalla diferente.

Por favor ayúdame, realmente no sé cómo puedo conectar esto con kivy sin usar ningún botón.
Aquí están los códigos:

python:

from kivy.app import App
import random
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen

class Main(ScreenManager):
pass

class Numbers(Screen):
def init(self, kwargs):
super().init(
kwargs)

def process(self):

    num_list = ['four','three']
    number = random.choice(num_list)
    self.number.text = number
    print(number)
    while True:

        if number == 'null':
            pass
        elif number == 'three':
            pass
        elif number == 'four':
            self.root.ids.numb.text="cuatro"
            print('Por ejemplo, aquí necesito conectar el código con kivy para mostrar en pantalla texto como cadena o saltar a otra pantalla')
            break
        else:
            pass

kv = Builder.load_file(‘temp.kv’)

class NumbersApp(App):
def build(self):
return kv

if name == ‘main‘:
NumbersApp().run()

y el archivo kv:

Main:
Numbers:
:
number:numb
cols:1
RelativeLayout:
Label:
id: numb
text: ‘Mostrando texto después de obtener\ninformación del script en el bucle while\nen el proceso def’
font_size: ’15’
hint_size: None, None
pos_hint: {‘x’: 0.04, ‘y’: -0.4}
color: 1,1,1,1

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para mostrar automáticamente el texto en una etiqueta o ventana emergente en respuesta a una coincidencia en una declaración “if” en Kivy, puede seguir los siguientes pasos:

    1. Primero, debe crear un widget de etiqueta o ventana emergente en su archivo .kv. Puede establecer su visibilidad inicial en invisible configurando opacity en 0 o disabled en True.
    2. En su clase Numbers, puede acceder al widget de etiqueta o ventana emergente usando su id y actualizar su texto o mostrar / ocultarlo según la coincidencia en la declaración “if”.

    Por ejemplo, para actualizar el texto de la etiqueta:

    self.root.ids.numb.text = "cuatro"
    

    Para mostrar la ventana emergente:

    self.root.ids.popup_id.open()
    

    Y para ocultar la ventana emergente:

    self.root.ids.popup_id.dismiss()
    
    1. También puede saltar a una pantalla diferente accediendo al ScreenManager y estableciendo su pantalla actual en el nombre de pantalla deseado.

    Por ejemplo:

    self.manager.current = 'otra_pantalla'
    

    Tenga en cuenta que debe dar un nombre a la pantalla en el archivo .kv usando el atributo name:

    OtraPantalla:
        name: 'otra_pantalla'
    

    En general, su código actualizado puede verse así:

    from kivy.app import App
    import random
    from kivy.lang import Builder
    from kivy.uix.screenmanager import ScreenManager, Screen
    
    class Main(ScreenManager):
        pass
    
    class Numbers(Screen):
        def __init__(self, **kwargs):
            super().__init__(**kwargs)
    
        def process(self):
            num_list = ['cuatro', 'tres']
            number = random.choice(num_list)
            self.number.text = number
            print(number)
    
            if number == 'null':
                pass
            elif number == 'tres':
                pass
            elif number == 'cuatro':
                self.root.ids.numb.text = "cuatro"
                # mostrar la ventana emergente, si usa un widget de ventana emergente
                #self.root.ids.popup_id.open()
                # saltar a otra pantalla
                #self.manager.current = 'otra_pantalla'
    
    kv = Builder.load_file('temp.kv')
    
    class NumbersApp(App):
        def build(self):
            return kv
    
    if __name__ == '__main__':
        NumbersApp().run()
    

    Y su archivo .kv actualizado puede verse así:

    python
    Main:
    Numbers:
    <numbers>:
    number:numb
    cols:1
    RelativeLayout:
    Label:
    id: numb
    text: 'Mostrar texto después de obtener información del script en el bucle while en la definición de proceso'
    font_size: '15'
    hint_size: None, None
    pos_hint: {'x': 0.04, 'y': -0.4}
    color: 1,1,1,1
    # ocultar la etiqueta inicialmente
    opacity: 0

Comments are closed.