Estoy intentando utilizar pyqt para mostrar una ventana QDialog personalizado cuando se hace clic en un botón en un QMainWindow. Sigo recibiendo el siguiente error:Abra una segunda ventana en 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'
He repasado varios tutoriales en línea, pero la mayoría de ellos deje justo antes de que muestra cómo utilizar un no incorporado en la ventana de diálogo. Genere el código para la ventana principal y el diálogo utilizando pyuic4. Lo que creo que debería ser el código relevante está debajo. ¿Que me estoy perdiendo aqui?
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()
Bono pregunta: ya que parece que no se puede pasar argumentos a las devoluciones de llamada de función PyQt, es establecer algo que de otro modo serían pasa como argumento (el mal llamado "c") a ser global la mejor manera para obtener información sobre esas funciones?
'Ui_MainWindow .__ init__' tiene un argumento:' dbConnection' que no parece pasar: 'self.ui = Ui_MainWindow()' - ¿Cómo puede funcionar su código? – fviktor
Whoops. Eliminé temporalmente las preguntas de la base de datos midquestion para ver si era parte del problema de alguna manera. Luego olvidé volver a copiar y volver a pasar el código después de ponerlo de nuevo. – James