[pyar] error desde una clase que llama a otra

Santiago Bruno bananabruno en gmail.com
Lun Mayo 28 16:27:28 ART 2012


2012/5/28 Fernando Gonzalez <fagonzalez en steel.com.ar>:
> Hola a todos, estoy haciendo las primeras pruebas con python, y hasta aca
> todo bien, cuando quiero profundizar un poco, me salen algunas dudas por los
> mensajes q me tiran
> aca les muestro un trozo de código que escribí
>
> import sys
> from PyQt4 import QtCore
> from PyQt4 import QtGui
> import fichacli
> import buscarcli
>
> class BuscarYReemplazar(QtGui.QDialog, fichacli.Ui_fichacliente):
>    def __init__(self, parent=None):
>        super(BuscarYReemplazar, self).__init__(parent)
>        #self.__text = unicode(text)
>        self.__index = 0
>        self.setupUi(self)
>        self.updateUI()
>
>    def updateUI(self):
>        self.connect(self.cmdBusca, QtCore.SIGNAL("clicked()"),
> self.BuscarCliente)
>
>    def BuscarCliente(self):
>        cBusq = buscarcli.BuscarCliente()
>        cBusq.connect(cBusq, QtCore.SIGNAL("DatoValido"), self.datoValido)
>        cBusq.show()
>
> en buscarcli tengo un botón y el siguiente código
>
> import sys
> from PyQt4 import QtCore
> from PyQt4 import QtGui
> import buscar
>
> class BuscarCliente(QtGui.QDialog, buscar.Ui_Buscar):
>
>    nombre = "DATO VALIDO"
>    nodato = "CANCELO"
>    def __init__(self, parent=None):
>        super(BuscarCliente, self).__init__(parent)
>        self.setupUi(self)
>        self.updateUI()
>
>    def updateUI(self):
>        #conecto los botones con los procedimientos que disparan los eventos
>        self.connect(self.cmdOk,
> QtCore.SIGNAL("clicked()"),self.DatoValido())
>
> self.connect(self.cmdCancela,QtCore.SIGNAL("clicked()"),self.Cancela())
>
>    #disparo los eventos
>    def DatoValido(self):
>        #self.emit(QtCore.SIGNAL("DatoValido"),self.nombre)
>        print "OK"
>
>    def Cancela(self):
>        self.emit(QtCore.SIGNAL("Cancela"),self.nodato)
>
> y cuando hago click de cmdBuscar de BuscarYReemplazar me tira lo siguiente
> por la consola:
>
> C:\PYTHON\QT\proyecto MDI1>cliente.py
> OK
> Traceback (most recent call last):
>  File "C:\PYTHON\QT\proyecto MDI1\cliente.py", line 34, in BuscarCliente
>    cBusq = buscarcli.BuscarCliente()
>  File "C:\PYTHON\QT\proyecto MDI1\buscarcli.py", line 24, in __init__
>    self.updateUI()
>  File "C:\PYTHON\QT\proyecto MDI1\buscarcli.py", line 28, in updateUI
>    self.connect(self.cmdOk, QtCore.SIGNAL("clicked()"),self.DatoValido())
> TypeError: arguments did not match any overloaded call:
>  QObject.connect(QObject, SIGNAL(), QObject, SLOT(),
> Qt.ConnectionType=Qt.AutoC
> onnection): argument 3 has unexpected type 'NoneType'
>  QObject.connect(QObject, SIGNAL(), callable,
> Qt.ConnectionType=Qt.AutoConnecti
> on): argument 3 has unexpected type 'NoneType'
>  QObject.connect(QObject, SIGNAL(), SLOT(),
> Qt.ConnectionType=Qt.AutoConnection
> ): argument 3 has unexpected type 'NoneType'
>
> C:\PYTHON\QT\proyecto MDI1>
>
> Por lo que entiendo, me dice q falta un argumento en SIGNAL(), pero
> clicked() no tiene argumento, o si, alguien se da una idea cual es el error
>
> desde ya gracias
>
> Fer
>
> PD: Tanto fichacli como buscar esta importadas desde QtDesigner con el
> pyuic4.exe

El tercer argumento de connect debería ser la función, y le estás
pasando el resultado de llamar a la función, en self.DatoValido() y
Cancela(). Supongo por el error "argument 3 has unexpected type
'NoneType'".


Saludos,

Santiago.



More information about the pyar mailing list