Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Problema con abrir dos ventanas asociadas tkinter
#1
Buenas:



Pues como dice el título. Tengo una app con que abre una ventana tk.Tk() con un simple login. Una vez confirmado el login lo que pretendo es que me abra varias ventanas tk.Toplevel (que se encuentran en distintos archivos.py(Son funciones) a la vez pero soy incapaz de conseguirlo y me ocurre una cosa curiosa. No puedo poner todo el código aquí porque es larguísimo, así que intentaré poner un resumen)



Tengo repartidas las "ventanas" en 4 archivos: App.py (Este es el archivo que contiene la ventana principal de login la cual oculto cuando quiero abrir las otras)

                                                                   Ccd.py(Este es una función simplemente que abre una ventana) Este no da problemas y se abre correctamente.

                                                                    Ccl.py(Este es otra función que abre otra ventana asociada a las dos anteriores. Esta no se abre..... ¡

                                                                    Ccc.py(Última archivo que es otra función que abre otra ventana tambien asociada a las anteriores)



Bien, abro la App, me sale el login. Escribo usuario y contraseña y doy a aceptar. Bien me abre la ventana del archivo Ccd correctamente. Os pongo aquí una pequeña parte del código que hace que se abra el archivo Ccd pero no los otros.



Código:
def printpasswor():
      if row == passw
          self.prinlog.withdraw() #Esta es la ventana principal del login. Se oculta sin problemas

          openCCD(self) # Esta es la primera ventana que se abre sin problemas.

          openCCL(self) # Esta ventana no se abre. Curiosamente se abre ¡CUANDO CIERRO LA APP app ¿WTF?!. Ademas aparencen dos ventanas la de mi función y
                                #otra pequeña cuyo título es tk.

          openCCC(self) # Esta ventana tampoco se abre...... ¡Hasta que cierro la anterior!. Y al igual que la anterior me aparecen dos ventanas. La de mí función y
                                 #otra más pequeña cuyo título es tk.



      else:

          messagebox.showinfo(message='La contraseña no es válida', title='ADVERTENCIA')



printpasswor()

¿Alguna idea de porque no se abren?. Si necesitáis más código puedo ponerlo aunque todo va a ser demasiado laborioso.
Muchas Gracias.
Responder
#2
Hola.

Es difícil saber qué pasa sin ver el código. Pero algo es evidente: tus funciones openCCD() y openCCL() están bloqueando la ejecución del código (puede que estés llamando a mainloop() nuevamente en esas funciones, lo cual es incorrecto), cosa que explica por qué las ventanas se abren sucesivamente a medida que se cierran las anteriores.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
(04-04-2020, 10:41 PM)Francisco escribió: Hola.

Es difícil saber qué pasa sin ver el código. Pero algo es evidente: tus funciones openCCD() y openCCL() están bloqueando la ejecución del código (puede que estés llamando a mainloop() nuevamente en esas funciones, lo cual es incorrecto), cosa que explica por qué las ventanas se abren sucesivamente a medida que se cierran las anteriores.

Saludos

Joer Francisco, ni google. ¡MUCHAS GRACIAS!.

Efectivamente estoy usando mainloop y en todas y cada una de las funciones que abren las ventanas. No sabía que eso era incorrecto. Pero entonces si intento llamar a la función en vez de un mainloop me indica que self no esta definido.

Vale, ¡CONSEGUIDO!. Encontré una solución que es usando el método update() en vez de mainloop(). De momento todo funciona correctamente. Espero que no me vuelva a dar problemas en el futuro. GRACIAS de nuevo.
Responder
#4
Bien, en principio creí que todo funcionaba correctamente pero hay un problema con el método update() y el comando image para añadir iconos a los widgets.

¿Qué método me recomendáis para abrir hasta 4 ventanas en tkinter?

Threading.Thread
Partial

o algún otro que no conozca. Lo he intentado con partial pero no he sido capaz de hacerlo funcionar. Cosa curiosa porque si tengo un boton que abre una ventana con partial y no me da ningún problema (A pesar de que la ventana que abro tiene mainloop también.

P.D. O más simple aún otro sistema de añadir imágenes que no sea PhotoImage.

Ahora sí TODO SOLUCIONADO. No podéis imaginar la gilipollez que era.
Responder
#5
Me alegro que lo hayas podido solucionar. Efectivamente, mainloop() solo debe llamarse una vez para la ventana principal, el resto de las ventana creadas vía tk.Toplevel no lo requieren.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)