python pyqt pyqt4

python - PyQT: como abrir una nueva ventana



pyqt4 (1)

En primer lugar, se han respondido preguntas similares antes, pero necesito ayuda con esta.

Tengo una ventana que contiene un botón (Class First) y quiero presionar, para que aparezca una segunda ventana en blanco (Class Second) .

Jugué con el código copiado de esta pregunta: PyQT al hacer clic en abrir ventana nueva , y escribí este código:

# -*- coding: utf-8 -*- from PyQt4 import QtGui, QtCore import sys import design1, design2 class Second(QtGui.QMainWindow, design2.Ui_MainWindow): def __init__(self, parent=None): super(Second, self).__init__(parent) self.setupUi(self) class First(QtGui.QMainWindow, design1.Ui_MainWindow): def __init__(self, parent=None): super(First, self).__init__(parent) self.setupUi(self) self.pushButton.clicked.connect(self.on_pushButton_clicked) self.dialog = Second(self) def on_pushButton_clicked(self): self.dialog.exec_() def main(): app = QtGui.QApplication(sys.argv) main = First() main.show() sys.exit(app.exec_()) if __name__ == ''__main__'': main()

pero on_pressed, aparece este mensaje de error:

AttributeError: ''Second'' object has no attribute ''exec_''

(design1 y design2 se han derivado del diseñador Qt).

Cualquier pensamiento sería apreciado.


Creo que deberías usar el método show .

Aquí hay un ejemplo de trabajo (derivado del tuyo):

#!/usr/bin/env python # -*- coding: utf-8 -*- from PyQt4 import QtGui, QtCore import sys class Second(QtGui.QMainWindow): def __init__(self, parent=None): super(Second, self).__init__(parent) class First(QtGui.QMainWindow): def __init__(self, parent=None): super(First, self).__init__(parent) self.pushButton = QtGui.QPushButton("click me") self.setCentralWidget(self.pushButton) self.pushButton.clicked.connect(self.on_pushButton_clicked) self.dialog = Second(self) def on_pushButton_clicked(self): self.dialog.show() def main(): app = QtGui.QApplication(sys.argv) main = First() main.show() sys.exit(app.exec_()) if __name__ == ''__main__'': main()

Si necesita una nueva ventana cada vez que hace clic en el botón, puede cambiar el código que crea el cuadro de diálogo dentro the on_pushButton_clicked método the on_pushButton_clicked

#!/usr/bin/env python # -*- coding: utf-8 -*- from PyQt4 import QtGui, QtCore import sys class Second(QtGui.QMainWindow): def __init__(self, parent=None): super(Second, self).__init__(parent) class First(QtGui.QMainWindow): def __init__(self, parent=None): super(First, self).__init__(parent) self.pushButton = QtGui.QPushButton("click me") self.setCentralWidget(self.pushButton) self.pushButton.clicked.connect(self.on_pushButton_clicked) self.dialogs = list() def on_pushButton_clicked(self): dialog = Second(self) self.dialogs.append(dialog) dialog.show() def main(): app = QtGui.QApplication(sys.argv) main = First() main.show() sys.exit(app.exec_()) if __name__ == ''__main__'': main()