Ich versuche, Pyqt zu verwenden, um ein benutzerdefiniertes QDialog-Fenster anzuzeigen, wenn auf eine Schaltfläche in einem QMainWindow geklickt wird. Ich erhalte den folgenden Fehler:Öffnen Sie ein zweites Fenster in PyQt
$ 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 über mehrere Online-Tutorials gegangen sind, aber die meisten von ihnen halten nur kurz zu zeigen, wie eine nicht verwenden integrierte Dialogfenster. Ich habe den Code für das Hauptfenster und den Dialog mit pyuic4 generiert. Was ich denke, sollte der relevante Code sein. Was fehlt mir 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 sieht aus wie Sie nicht Argumente in pyqt Funktion Rückrufen passieren können, etwas setzen, die sonst als Argument übergeben wird (die schlecht namens „c“) global zu dem besten Weg, um Informationen in diese Funktionen zu bekommen?
'Ui_MainWindow .__ init__' hat ein Argument:' dbConnection', das Sie nicht zu übergeben scheinen: 'self.ui = Ui_MainWindow()' - Wie kann Ihr Code überhaupt funktionieren? – fviktor
Whoops. Ich habe das Datenbankkram vorübergehend entfernt, um zu sehen, ob es irgendwie Teil des Problems war. Dann habe ich vergessen, den Code erneut zu kopieren und zu kopieren, nachdem ich ihn wieder eingefügt habe. – James