но мне нужно контролировать некоторые элементы пользовательского интерфейса внутри потоковой функции.
Это пример моего кода, в котором запускается поток. он изменяет метки пользовательского интерфейса. но у меня появляется ошибка «QObject::setParent: невозможно установить родительский элемент, новый родительский элемент находится в другом потоке».
Как правильно заставить этот код работать?
Код: Выделить всё
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
import sys, time
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
# set central widget
self.centralwidget = QWidget(self)
self.setCentralWidget(self.centralwidget)
lay = QVBoxLayout(self.centralwidget)
self.button = QPushButton("Conectar")
self.status = QLabel("Status")
self.status.setAlignment(Qt.AlignCenter)
self.conta = QLabel("Valor conta")
self.conta.setAlignment(Qt.AlignCenter)
self.tipo = QLabel("Tipo conexão")
self.tipo.setAlignment(Qt.AlignCenter)
lay.addWidget(self.button)
lay.addWidget(self.status)
lay.addWidget(self.conta)
lay.addWidget(self.tipo)
self.status.hide()
self.conta.hide()
self.tipo.hide()
class thread(QThread):
def __init__(self,target=None, args=()):
super().__init__()
self._target = target
self._args = args
def run(self):
if self._target:
self._target(*self._args)
def conectar():
self.status.show()
self.status.setText('Buscando credenciais no servidor')
time.sleep(1)
### chama funções do servidor
self.status.setText('Usuário validadado, iniciando conexão')
time.sleep(1)
### chama funções que fazem conexão da api
self.status.setText('Conectado com sucesso')
time.sleep(1)
self.status.hide()
self.conta.show()
self.tipo.show()
self.conta.setText('R$ 150.00')
self.tipo.setText('Demo')
app = QApplication(sys.argv)
self = MainWindow()
self.qthread = thread(target=conectar)
self.button.clicked.connect(lambda: self.qthread.start())
self.show()
sys.exit(app.exec_())
но в некоторых функциях есть несколько элементов, я не знаю, как это сделать с помощью сигнала и слот.
Подробнее здесь: https://stackoverflow.com/questions/787 ... way-for-my