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()
3 Réponses :
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()
D'accord. Mais mon programme fonctionne toujours comme avant. Toute idée pourquoi je reçois l'erreur "Descripteur ' init b>' nécessite un objet" SIP.SIMPLEWRAPPER ", mais a reçu un" ui_dialog "" lorsque j'essaie d'ouvrir une deuxième fenêtre?
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
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_()
ui_mainwindow .__ init __ code> a un argument:
dbconnection code> que vous ne semblez pas passer:
self.ui = ui_mainwindow () code> - 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.