Öffnen Sie ein zweites Fenster, in PyQt

Ich versuche, pyqt, um zu zeigen Sie eine benutzerdefinierte QDialog-Fenster, wenn eine Taste auf einem QMainWindow geklickt wird. Ich erhalte die folgende Fehlermeldung:

$ python main.py 
DEBUG: Launch edit window
Traceback (most recent call last):
  File "/home/james/Dropbox/Database/qt/ui_med.py", line 23, in launchEditWindow
    dialog = Ui_Dialog(c)
  File "/home/james/Dropbox/Database/qt/ui_edit.py", line 15, in __init__
    QtGui.QDialog.__init__(self)
TypeError: descriptor '__init__' requires a 'sip.simplewrapper' object but received a 'Ui_Dialog'

Ich habe über mehrere online-tutorials, aber die meisten von Ihnen stoppen nur kurz zeigen, wie man mit einem nicht gebaut-im-dialog-Fenster. Ich habe den code generiert, sowohl für den Haupt-Fenster und der dialog mit pyuic4. Was ich denke, sollte der entsprechende code ist unten. Was vermisse ich hier?

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

Bonus-Frage: da es so aussieht, wie Sie nicht passieren können Argumente in pyqt und Funktions-callbacks, ist etwas, das würde anders werden als argument übergeben (die schlecht benannte "c"), um global sein, der beste Weg, um Informationen in die Funktionen?

  • Ui_MainWindow.__init__ hat ein argument: dbConnection die Sie scheinen nicht zu passen: self.ui = Ui_MainWindow() - Wie kann dein code überhaupt funktionieren?
  • Hoppla. Ich vorübergehend entfernt, die Datenbank Sachen midquestion um zu sehen, ob es war Teil des Problems irgendwie. Dann vergaß ich umkopieren und repaste den code, nachdem Sie es wieder in.
InformationsquelleAutor James | 2009-11-27
Schreibe einen Kommentar