Pagina 1 di 1

[python][pyqt]Aprire secondo widget da uno precedente

Inviato: mercoledì 10 giugno 2015, 23:30
da Ilpinguino89
Salve a tutti, sto sviluppando un'applicazione in Python ma mi sono imbattuto in un problema.
Non riesco ad aprire un widget alla pressione di un bottone; le interfacce le ho create con QtDesigner e successivamente "esportate" in python con pyuic4
Ringrazio per eventuali future risposte
Ilpinguino89

Re: [python][pyqt]Aprire secondo widget da uno precedente

Inviato: giovedì 11 giugno 2015, 23:59
da cortinico
Potresti postare il codice per favore?

Re: [python][pyqt]Aprire secondo widget da uno precedente

Inviato: venerdì 12 giugno 2015, 1:26
da Ilpinguino89
Main_ui --> Interfaccia della finestra madre

Codice: Seleziona tutto

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Main.ui'
#
# Created: Fri Jun 12 00:20:07 2015
#      by: PyQt4 UI code generator 4.10.4
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui
import sys
from setAllarm_ui import Ui_setAllarm
try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Main(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.setupUi(self)
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(704, 440)
        self.horizontalLayout = QtGui.QHBoxLayout(Form)
        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
        self.verticalLayout = QtGui.QVBoxLayout()
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        self.Allarm_btn = QtGui.QPushButton(Form)
        self.Allarm_btn.setObjectName(_fromUtf8("Allarm_btn"))
        self.verticalLayout.addWidget(self.Allarm_btn)
        self.Timer_btn = QtGui.QPushButton(Form)
        self.Timer_btn.setObjectName(_fromUtf8("Timer_btn"))
        self.verticalLayout.addWidget(self.Timer_btn)
        self.cronometer_btn = QtGui.QPushButton(Form)
        self.cronometer_btn.setObjectName(_fromUtf8("cronometer_btn"))
        self.verticalLayout.addWidget(self.cronometer_btn)
        self.horizontalLayout.addLayout(self.verticalLayout)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)
        Form.setTabOrder(self.Allarm_btn, self.Timer_btn)
        Form.setTabOrder(self.Timer_btn, self.cronometer_btn)

    def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "Form", None))
        self.Allarm_btn.setText(_translate("Form", "Set Allarm", None))
        self.Timer_btn.setText(_translate("Form", "Set Timer", None))
        self.cronometer_btn.setText(_translate("Form", "Set Cronometer", None))
        
        self.Allarm_btn.clicked.connect(lambda:self.setAllarm())
    
    def setAllarm(self):
        app=QtGui.QApplication(sys.argv)
        form=Ui_setAllarm()
        form.show()
        sys.exit(app.exec_())

setAllarm_ui --> interfaccia della finestra che voglio aprire

Codice: Seleziona tutto

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'setAllarm.ui'
#
# Created: Fri Jun 12 00:20:33 2015
#      by: PyQt4 UI code generator 4.10.4
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_setAllarm(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.setupUi(self)
        
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(496, 56)
        self.dateTimeEdit = QtGui.QDateTimeEdit(Form)
        self.dateTimeEdit.setGeometry(QtCore.QRect(30, 20, 194, 27))
        self.dateTimeEdit.setObjectName(_fromUtf8("dateTimeEdit"))
        self.ok_btn = QtGui.QPushButton(Form)
        self.ok_btn.setGeometry(QtCore.QRect(250, 20, 98, 27))
        self.ok_btn.setObjectName(_fromUtf8("ok_btn"))
        self.cancel_btn = QtGui.QPushButton(Form)
        self.cancel_btn.setGeometry(QtCore.QRect(370, 20, 98, 27))
        self.cancel_btn.setObjectName(_fromUtf8("cancel_btn"))

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "Form", None))
        self.ok_btn.setText(_translate("Form", "Ok", None))
        self.cancel_btn.setText(_translate("Form", "Cancell", None))

Main -->Avvio applicazione

Codice: Seleziona tutto

from Main_ui import Ui_Main
from PyQt4 import QtGui
import sys

if __name__=='__main__':
    app=QtGui.QApplication(sys.argv)
    form=Ui_Main()
    form.show()
    sys.exit(app.exec_())
Se lo avvio e premo sul pulsante l'errore è:

Codice: Seleziona tutto

 QCoreApplication::exec: The event loop is already running