11
votes

Ouvrir une deuxième fenêtre dans Pyqt

J'essaie d'utiliser Pyqt pour afficher une fenêtre QDialog personnalisée lorsqu'un bouton sur un QmainWindow est cliqué. Je continue à obtenir l'erreur suivante:

class Ui_Dialog(object):
    def __init__(self, dbConnection):
        QtGui.QDialog.__init__(self)
        global c
        c = dbConnection

class Ui_MainWindow(object):
    def __init__(self, dbConnection):
        global c
        c = dbConnection

    def launchEditWindow(self):
        print "DEBUG: Launch edit window"
        dialog = QtGui.QDialog()
        dialogui = Ui_Dialog(c)
        dialogui = setupUi(dialog)
        dialogui.show()

class StartQT4(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        conn = sqlite3.connect('meds.sqlite')
        c = conn.cursor()
        self.ui = Ui_MainWindow(c)
        self.ui.setupUi(self)

def main():
    app = QtGui.QApplication(sys.argv)
    program = StartQT4()
    program.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()


2 commentaires

ui_mainwindow .__ init __ a un argument: dbconnection que vous ne semblez pas passer: self.ui = ui_mainwindow () - Comment votre code peut-il travailler du tout?


Whoops. J'ai temporairement supprimé la base de données de base de données pour voir si cela faisait partie du problème. Ensuite, j'ai oublié de répéter et de reprocher le code après la reporter.


3 Réponses :


1
votes
class Dialog(QDialog):
    def __init__(self, parent):
        QDialog.__init__(parent)
        line_edit = QLineEdit()
    ...

dialog = Dialog()
if dialog.exec_():   # here dialog will be shown and main script will wait for its closing (with no errors)
    data = dialog.line_edit.text()

1 commentaires

D'accord. Mais mon programme fonctionne toujours comme avant. Toute idée pourquoi je reçois l'erreur "Descripteur ' init ' nécessite un objet" SIP.SIMPLEWRAPPER ", mais a reçu un" ui_dialog "" lorsque j'essaie d'ouvrir une deuxième fenêtre?



3
votes

ui_dialog doit inhérent à qtgui.qdialog, pas d'objet.

class Ui_Dialog(QtGui.QDialog):
    def __init__(self, dbConnection):
        QtGui.QDialog.__init__(self)
        global c
        c = dbConnection


0 commentaires

18
votes

J'ai fait comme ça dans le passé et je peux le dire ça marche. En supposant que votre bouton est appelé "BOUTON"

class Main(QtGui.QMainWindow):
    ''' some stuff '''
    def on_Button_clicked(self, checked=None):
        if checked==None: return
        dialog = QDialog()
        dialog.ui = Ui_MyDialog()
        dialog.ui.setupUi(dialog)
        dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        dialog.exec_()


0 commentaires