IIC2233 / syllabus-2021-1

Repositorio oficial del curso IIC2233 Programación Avanzada 🚀✨
https://iic2233.github.io
38 stars 49 forks source link

Python no responde al ejecutar un .show() de una ventana #841

Open raibd opened 3 years ago

raibd commented 3 years ago

Prerrequisitos

(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")

Duda

Al intentar mostrar la ventana de juego con show(), la aplicacion deja de responder y tengo que cerrar las salas de espera con un popup que me da windows. Lo raro es que antes de hacer el ventana_juego.show() estoy enviando una señal a esa misma instancia y si se esta recibiendo, pero al ejecutarse la linea con el show() se colapsa. Otra cosa rara es que antes si estaba funcionando perfectamente y se estaba abriendo la ventana. La ventana se creó en Designer.

Gustav2000 commented 3 years ago

Hola @raibd recuerdo haber respondido una issue, en la que a alguien le pasaba lo mismo que a tí. Que al enviar una señal que activaba el show el programa se quedaba "pegado" y como tu dices había que terminar por cerrarlo. La solución que encontré que puede que te funcione es que al momento de instanciar tu ventanta_juego hagas un show y a continuación un hide. Al menos de esta forma se pudo solucionar el error que te mencioné.

Inténtalo a ver si te funciona.

raibd commented 3 years ago

Hola, lamentablemente no me funciona todavia. Además, descubrí algo que me hace menos sentido. digamos que la función que ejecuto para abrir la ventana es la siguiente:

def mostrar_ventana(self, _dict):
    self.log("El juego esta empezando...")
    self.ventana_juego.senal_recibir_usuario_juego.emit(_dict)
    #self.ventana_juego.show()      
    self.sala_espera.close()

donde comenté el show() de la ventana de juego. Cuando presiono iniciar, en todas las consolas de los clientes se imprime claramente el log "el juego esta empezando...", pero si pongo un print en la función que recibe el usuario en __ventana_juego__, se esperaría que todos los clientes pasen por ese print ya que todos pasaron por el log, pero lo que ocurre es que solo dos de los clientes pasan por el print. Entonces por alguna razón la señal solo le llega a las ventanas de juego de algunos clientes, pero todos la emitieron por separado. No se me ocurre que hacer.

fernandosmither commented 3 years ago

Hola, lamentablemente no me funciona todavia. Además, descubrí algo que me hace menos sentido. digamos que la función que ejecuto para abrir la ventana es la siguiente:

def mostrar_ventana(self, _dict):
    self.log("El juego esta empezando...")
    self.ventana_juego.senal_recibir_usuario_juego.emit(_dict)
    #self.ventana_juego.show()        
    self.sala_espera.close()

donde comenté el show() de la ventana de juego. Cuando presiono iniciar, en todas las consolas de los clientes se imprime claramente el log "el juego esta empezando...", pero si pongo un print en la función que recibe el usuario en ventana_juego, se esperaría que todos los clientes pasen por ese print ya que todos pasaron por el log, pero lo que ocurre es que solo dos de los clientes pasan por el print. Entonces por alguna razón la señal solo le llega a las ventanas de juego de algunos clientes, pero todos la emitieron por separado. No se me ocurre que hacer.

No soy ayudante, pero intentaste hacerlo con señales? 😅 (Escuché que así se arreglaba)

Gustav2000 commented 3 years ago

Ohhh la verdad es que está muy raro eso, y no me suena cómo se podría resolver. Todo esto lo realizas a nivel de cliente sin pasar por el servidor? Es decir, todo esto funciona independiente del servidor?