"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo compartir datos entre la ventana principal y los subprocesos en PyQt: referencia directa frente a señales y ranuras?

¿Cómo compartir datos entre la ventana principal y los subprocesos en PyQt: referencia directa frente a señales y ranuras?

Publicado el 2024-11-06
Navegar:214

How to Share Data Between the Main Window and Threads in PyQt: Direct Reference vs. Signals and Slots?

Compartir datos entre la ventana principal y el subproceso en PyQt

Las aplicaciones multiproceso a menudo necesitan compartir datos entre el subproceso de la ventana principal y los subprocesos de trabajo. Para garantizar la seguridad de los subprocesos y una comunicación adecuada, PyQt ofrece varios enfoques prácticos.

Opción 1: Referencia directa a la ventana principal

En este enfoque, una referencia a la ventana principal La ventana se pasa al hilo. Luego, el hilo puede acceder directamente a los datos en la ventana principal, como el valor de un cuadro de número.

class MainWindow(QtGui.QWidget):
    def __init__(self):
        # ...
        self.worker = Worker(self)
        # ...

class Worker(QtCore.QThread):
    def __init__(self, host_window):
        super(Worker, self).__init__()
        self.host = host_window
        # ...

Opción 2: Señales y ranuras

PyQt utiliza señales y ranuras para comunicarse entre objetos. En este enfoque, el subproceso de trabajo emite señales cuando los datos cambian y las funciones de la ranura de la ventana principal manejan las actualizaciones.

class MainWindow(QtGui.QWidget):
    def __init__(self):
        # ...
        self.worker = Worker()
        self.worker.beep.connect(self.update)
        # ...

class Worker(QtCore.QThread):
    beep = QtCore.pyqtSignal(int)

    def __init__(self):
        super(Worker, self).__init__()
        # ...

¿Qué opción usar?

La elección depende de las necesidades del hilo y del nivel de control requerido.

  • La opción 1 ofrece acceso directo a los datos de la ventana principal, pero puede no ser tan escalable para compartir datos más complejos.
  • La opción 2 garantiza la seguridad de los subprocesos y admite una comunicación más flexible patrones.

Consideraciones de seguridad de subprocesos

Los widgets no son seguros para subprocesos. Por lo tanto, es crucial utilizar señales y ranuras para manejar la comunicación entre el hilo y la ventana principal. La manipulación directa de widgets de múltiples hilos puede provocar un comportamiento inesperado.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3