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.
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.
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