Pyside (pyqt), как управлять пользовательским интерфейсом через qthread? каков правильный путь для моего примера [дубликPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Pyside (pyqt), как управлять пользовательским интерфейсом через qthread? каков правильный путь для моего примера [дублик

Сообщение Anonymous »

Я создаю программу в pyside, где большинство функций будут связаны через потоки, поскольку они требуют много времени. и интерфейс должен работать.
но мне нужно контролировать некоторые элементы пользовательского интерфейса внутри потоковой функции.
Это пример моего кода, в котором запускается поток. он изменяет метки пользовательского интерфейса. но у меня появляется ошибка «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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Ожидание завершения PyQt/PySide.QtCore.QThread, прежде чем что-то делать
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Ожидание завершения PyQt/PySide.QtCore.QThread, прежде чем что-то делать
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Ожидание завершения PyQt/PySide.QtCore.QThread, прежде чем что-то делать
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как я могу запустить код Python с пользовательским интерфейсом PyQt на сервере Azure
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Имеет ли смысл использовать Qthread, не вызывая QThread :: start ()?
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»