Compartilhando dados entre a janela principal e o thread no PyQt
Aplicativos multithread geralmente precisam compartilhar dados entre o thread da janela principal e os threads de trabalho. Para garantir a segurança do thread e a comunicação adequada, o PyQt oferece várias abordagens práticas.
Opção 1: referência direta à janela principal
Nesta abordagem, uma referência à janela principal janela é passada para o thread. O thread pode então acessar diretamente os dados na janela principal, como o valor de uma caixa giratória.
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
# ...
Opção 2: Sinais e Slots
PyQt usa sinais e slots para se comunicar entre objetos. Nesta abordagem, o thread de trabalho emite sinais quando os dados mudam, e as funções do slot da janela principal lidam com as atualizações.
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__()
# ...
Qual opção usar?
A escolha depende das necessidades do thread e do nível de controle necessário.
Considerações sobre segurança de thread
Widgets não são thread-safe. Portanto, é crucial usar sinais e slots para lidar com a comunicação entre o thread e a janela principal. A manipulação direta de widgets de vários threads pode levar a um comportamento inesperado.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3