2012-06-30 7 views
6

Al leer this, dos preguntas surgieron:PyQt4 @pyqtSlot: ¿para qué es el resultado kwarg?

1. Dice

a veces es necesario para marcar explícitamente un método de Python como una ranura Qt

Mientras siempre use el decorador @pyqtSlot porque dice:

Conne nexión una señal a un método de Python decorado también tiene la ventaja de reducir la cantidad de memoria utilizada y es ligeramente más rápido

me pregunto: ¿en qué casos concretos es necesario? y: ¿hay alguna ventaja de no usar el decorador @pyqtSlot?

2. El argumento de la palabra clave resultante, ¿cuál es su propósito?

@pyqtSlot(int, result=int) 
def foo(self, arg1): 
    """ C++: int foo(int) """ 

Parece que el tipo del valor de retorno, pero que yo sepa no es posible recuperar los valores de retorno al emisor de señales.

¿Alguna idea sobre eso?

Respuesta

6
  1. Es más rápido gracias a la arquitectura de PyQt. PyQt convierte las ranuras de python en ranuras C++, para comunicarse con el marco Qt. Cuando marca explícitamente un método de Python como un intervalo de Qt y le proporciona una firma de C++, el código de PyQt no tiene que adivinar la firma de C++, como ya se ha especificado. Esto puede mejorar el rendimiento en proyectos pesados.

  2. El valor de retorno solo es necesario cuando desea llamar a la ranura como una función normal.

Editar: Parece que el método QMetaObject.invokeMethod ejecuta una ranura y utiliza su valor de retorno.

+0

¡Eso tiene sentido, gracias! Entonces, supongo que no hay ventaja de no usar el decorador, es decir, ? – Pedru

+0

utilícelo en ranuras muy utilizadas. Si se trata de una ranura básica que no hace mucho y no se llama mucho, no es necesario en el decorador. Mejora un poco la secuencia de comandos, pero no se notará en funciones simples. – iTayb

+0

OK, entonces yo diría que siempre lo use porque mejora la legibilidad del código (con resaltado de sintaxis) – Pedru

Cuestiones relacionadas