Foros del Web » Programando para Internet » Python »

Como abrir una segunda ventana

Estas en el tema de Como abrir una segunda ventana en el foro de Python en Foros del Web. Tengo una aplicacion1 que hace un trabajo determinado, al terminar, la idea es que, mediante un boton, se cierre esa aplicacion1 y llame a la ...
  #1 (permalink)  
Antiguo 17/12/2013, 03:04
 
Fecha de Ingreso: octubre-2013
Mensajes: 59
Antigüedad: 10 años, 6 meses
Puntos: 0
Como abrir una segunda ventana

Tengo una aplicacion1 que hace un trabajo determinado, al terminar, la idea es que, mediante un boton, se cierre esa aplicacion1 y llame a la otra aplicacion2, pasandole ciertos parametros con los que esta segunda apliacion trabajara.

El problema es que, despues de que la apliacion1 ha terminado, al pulsar el boton que esta conectado con el "main" de la apliacion2 obtengo el siguiente mensaje:

Código Python:
Ver original
  1. QCoreApplication::exec: The event loop is already running

Con lo cual no se que hacer para llamar desde apliacion1 a aplicacion2

La llamada desde apliacion1 la he hecho simplemente conectando un boton con esto:

Código Python:
Ver original
  1. def launchResults(self):
  2.        
  3.         resultsShow.main() #resultsShow es lo que he llamado apliacion2
  4.         #el metodo launchResults estaria dentro de aplicacion1
  5.         #no he puesto el paso de parametros, solo la llamada
  6.         quit()

Me gustaria saber si alguien me podria ayudar con esto.

Una cosa mas, esto no lo necesito pero...Y si quisiera tener 2 ventanas abiertas, esto es, dos "MainWindow" cada una con sus botones, etc etc, seria posible?

Gracias
  #2 (permalink)  
Antiguo 17/12/2013, 16:56
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Como abrir una segunda ventana

Algo mas o menos así

Código Python:
Ver original
  1. import sys
  2. from PyQt4 import QtGui, QtCore
  3.  
  4. class ChildWindow(QtGui.QWidget):
  5.     def __init__(self, name=None):
  6.         super(ChildWindow, self).__init__()
  7.         self.name = name
  8.         self.initUI()
  9.  
  10.     def initUI(self):
  11.         btn1 = QtGui.QPushButton("%s" % self.name, self)
  12.         btn1.move(30, 50)
  13.  
  14.         self.setGeometry(300, 300, 250, 180)
  15.         self.setWindowTitle('Child Window %s' % self.name)
  16.         self.show()
  17.  
  18.  
  19. class MainWindow(QtGui.QMainWindow):
  20.     def __init__(self):
  21.         super(MainWindow, self).__init__()
  22.         self.children = []
  23.         self.initUI()
  24.        
  25.     def initUI(self):
  26.         btn1 = QtGui.QPushButton("Start", self)
  27.         btn1.move(30, 50)
  28.  
  29.         self.le = QtGui.QLineEdit(self)
  30.         self.le.move(30, 20)
  31.      
  32.         btn1.clicked.connect(self.buttonClicked)
  33.        
  34.         self.setGeometry(300, 300, 290, 150)
  35.         self.setWindowTitle('Multiple windows example')
  36.         self.show()
  37.        
  38.     def buttonClicked(self):
  39.         child = ChildWindow(name=self.le.text())
  40.         self.children.append(child)
  41.  
  42. def main():
  43.     app = QtGui.QApplication(sys.argv)
  44.     main_window = MainWindow()
  45.     sys.exit(app.exec_())
  46.  
  47.  
  48. if __name__ == '__main__':
  49.     main()
  #3 (permalink)  
Antiguo 18/12/2013, 01:14
 
Fecha de Ingreso: octubre-2013
Mensajes: 59
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Como abrir una segunda ventana

Razpeitia gracias como siempre!!, pero por lo que veo tienes las dos clases en lo que seria el mismo archivo .py. Ademas una clase QtGui.QMainWindow y la otra QtGui.QWidget.

Yo tengo dos archivos .py separados, uno para cada aplicacion, ademas mis dos clases son QtGui.QMainWindow...esto esta mal?? se puede hacer funcionar como yo quiero pero teniendo las dos clases asi, y separadas en 2 archivos .py diferentes??

Gracias otra vez!!
  #4 (permalink)  
Antiguo 18/12/2013, 12:27
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Como abrir una segunda ventana

Si, puedes tener tus clases en diferentes módulos. Solamente los importas cuando los vayas a ocupar.

Y no, no puedes tener múltiples instancias QMainWindow pero de QWidget si.
  #5 (permalink)  
Antiguo 19/12/2013, 01:00
 
Fecha de Ingreso: octubre-2013
Mensajes: 59
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Como abrir una segunda ventana

Ok pues gracias!! Intentare modificarlo a ver si consigo hacerlo funcionar. Imagino que no importara nada que la otra aplicacion sea QtGui.QWidget, me refiero a que seguira funcionando todo igual botones, lineEdits, sliders etc etc.

Gracias!
  #6 (permalink)  
Antiguo 06/03/2014, 05:02
 
Fecha de Ingreso: octubre-2013
Mensajes: 59
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Como abrir una segunda ventana

Hola, debo decirte que esta consulta me sirvio de mucho y al final lo hice funcionar.

Ahora tengo otro problema, relacionado con esto.

Si abro una segunda ventana (childWindow) al presionar un boton en la MainWindow. Como hago para que, los resultados que se obtienen en la childWindow al hacer unos calculos , al hacer click en "cerrar", esten luego disponibles para la MainWindow??.

Esto que parece simple, y seguro que lo es, me esta dando buenos dolores de cabeza.
  #7 (permalink)  
Antiguo 06/03/2014, 09:19
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: Como abrir una segunda ventana

Usa el evento closeEvent para saber cuando se cierra la ventana y ahí se los pasas a MainWindow
  #8 (permalink)  
Antiguo 06/03/2014, 10:00
 
Fecha de Ingreso: octubre-2013
Mensajes: 59
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Como abrir una segunda ventana

Gracias!

He hecho una prueba haciendo esto:
Código Python:
Ver original
  1. def closeEvent(self, evnt):
  2.         value = 34
  3.         return value

Pero creo que no voy por buen camino.....


Código Python:
Ver original
  1. TypeError: invalid result type from ChildWindow.closeEvent()
  #9 (permalink)  
Antiguo 06/03/2014, 12:15
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: Como abrir una segunda ventana

Debes retornar el evento original. Algo así:

Código Python:
Ver original
  1. def closeEvent(self, evnt):
  2.     # Haces tu trabajo...
  3.     return ChildWindow.closeEvent(self, evnt)

Aunque no se si es necesario eso, tal vez puedas no retornar nada
  #10 (permalink)  
Antiguo 07/03/2014, 00:39
 
Fecha de Ingreso: octubre-2013
Mensajes: 59
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Como abrir una segunda ventana

Cita:
Iniciado por carbon Ver Mensaje
Debes retornar el evento original. Algo así:

Código Python:
Ver original
  1. def closeEvent(self, evnt):
  2.     # Haces tu trabajo...
  3.     return ChildWindow.closeEvent(self, evnt)

Aunque no se si es necesario eso, tal vez puedas no retornar nada
Lo probare, a ver que pasa.... Gracias!

Etiquetas: gui, segunda, ventana
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:31.