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()