Pregunta

Me gustaría saber si mi aplicación está inactiva para que yo puede cargar el contenido.Hay un evento o algo similar implementado en PyQt?

(Yo también podría hacerlo con los hilos, pero esto se siente como ser demasiado complicado.)

¿Fue útil?

Solución

Usted tiene al menos dos opciones diferentes, se puede utilizar un hilo o utilizar un temporizador. QThread clase de Qt proporciona una propiedad de prioridad que se puede configurar para que sea único proceso cuando no hay otros hilos se están ejecutando, que incluye el hilo GUI. La otra opción es un temporizador de disparo. A QTimer con un tiempo de espera de 0 milisegundos pone un evento en la parte posterior de la cola de eventos de modo que todos los eventos y funciones sincrónicas ya activas o programadas serán procesadas primero.

En el código, las dos opciones se vería como la siguiente:

// (1) use idle thread processing
MyQThreadSubclass idleThread;
idleThread.run(QThread::IdlePriority);

// (2) use QTimer::singleShot
QTimer::singleShot(0, receiver, SLOT(doIdleProcessingChunk));

Si usted va con el único disparo QTimer, tenga cuidado de cuánto procesamiento haces lo que todavía puede bloquear la GUI. Es probable que querría romper en trozos para que la GUI no se iniciará a la zaga:

// slot
void doIdleProcessingChunk() {
    /* ... main processing here ... */
    if (chunksRemain())
        QTimer::singleShot(0, receiver, SLOT(doIdleProcessingChunk));
}

Obviamente, lo anterior es C ++ sintaxis, pero para responder con respecto a PyQt, utilice el temporizador de disparo único. En Python, el mundial bloqueo intérprete es, básicamente, va a hacer que la mayor parte de su concurrencia sentido si la puesta en práctica siendo llamado se realiza dentro de Python.

También se tiene la opción de usar hilos de Python o hilos de Qt, ambos son buenos para diferentes razones.

Otros consejos

Eche un vistazo a QAbstractEventDispatcher. Pero ...Todavía me sugieren el uso de un hilo.Razones:

  1. Será portable
  2. Si usted comete un error en su código, el bucle de eventos será roto -> Que aplicación podría colgar, salir de repente, etc.
  3. Mientras que la precarga sucede, la aplicación se bloquea.No hay eventos será procesada a menos que usted puede cargar el contenido de una en una, todas son muy pequeñas, la carga sólo toma unos pocos milisegundos, etc.

El uso de un hilo y enviar una señal al hilo principal cuando el contenido está listo.Es mucho más simple.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top