PyQt5 QThread правильные варианты работы с вторичными потоками.
Начнем наверное с неправильного варианта...
а может и правильного...
Ниже код, где в textBrowser созданного в основном потоке и передаваемого по ссылке вторичному вторичному, из вторичного потока в цикле печатается информация в двух вариантах. И в основной форме при нажатии на pushButton так же выводится текст уже в 3-ем варианте.
Сейчас сильно отвлекают, но я передалаю все на сигналы.
И тут же выложу.
import sys import time from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtGui import QColor # Форма, сделанны через Qt Desinger class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(453, 408) self.verticalLayout = QtWidgets.QVBoxLayout(Form) self.verticalLayout.setObjectName("verticalLayout") self.verticalLayout_2 = QtWidgets.QVBoxLayout() self.verticalLayout_2.setObjectName("verticalLayout_2") self.textBrowser = QtWidgets.QTextBrowser(Form) self.textBrowser.setObjectName("textBrowser") self.verticalLayout_2.addWidget(self.textBrowser) self.verticalLayout.addLayout(self.verticalLayout_2) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.pushButton = QtWidgets.QPushButton(Form) self.pushButton.setObjectName("pushButton") self.horizontalLayout.addWidget(self.pushButton) spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem1) self.verticalLayout.addLayout(self.horizontalLayout) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Пример")) self.pushButton.setText(_translate("Form", "Ввод")) # Вторичный поток в который я передаю ссылку на текстовый броузер class ThreadUI(QtCore.QThread): def __init__(self, textBrowser): """Инициализация потока""" QtCore.QThread.__init__(self) self.daemon = True self.textBrowser = textBrowser def run(self): print('Запуск потока') while True: self.textBrowser.setTextColor(QColor(0, 0, 255)) self.textBrowser.append(str(time.strftime("%Y-%m-%d-%H.%M.%S", time.localtime())) + '- поток 2 вариант ' '1.\n') QtCore.QThread.msleep(1000) self.textBrowser.setTextColor(QColor(255, 0, 0)) self.textBrowser.append(str(time.strftime("%Y-%m-%d-%H.%M.%S", time.localtime())) + '- поток 2 вариант ' '2.\n') QtCore.QThread.msleep(1000) # Класс окна с логикой class MyWindow(QtWidgets.QTableWidget): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent) self.ui = Ui_Form() self.ui.setupUi(self) self.ui.pushButton.clicked.connect(self.setTextBriwser) self.threadUI = ThreadUI(self.ui.textBrowser) self.threadUI.start() def setTextBriwser(self): self.ui.textBrowser.setTextColor(QColor(0, 255, 0)) self.ui.textBrowser.append(str(time.strftime("%Y-%m-%d-%H.%M.%S", time.localtime())) + '- поток 1 вариант ' '3.\n') if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) window = MyWindow() # window.setWindowIcon(QIcon('logo.png')) window.show() sys.exit(app.exec())
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
AD
- Akiv Doros
- 11 ноября 2024 г. 22:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50баллов,
- Очки рейтинга-4
m
- molni99
- 26 октября 2024 г. 8:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80баллов,
- Очки рейтинга4
m
- molni99
- 26 октября 2024 г. 8:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20баллов,
- Очки рейтинга-10
Последние комментарии
ИМ
Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь Максимов22 ноября 2024 г. 19:51
Evgenii Legotckoi31 октября 2024 г. 21:37
Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов5 октября 2024 г. 14:51
QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Сейчас обсуждают на форуме
Evgenii Legotckoi24 июня 2024 г. 22:11
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey115 ноября 2024 г. 14:04
NSProject4 июня 2022 г. 10:49
IscanderChe31 октября 2024 г. 22:43
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
Добрый день. Не смог быстро среагировать на ваш вопрос. Но вот вам целая статья о том, как правильно использовать QThread в PyQt5 на основе вашего кода
PyQt5 - Урок 009. Использование QThread с применением moveToThread