Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
2 / 2 / 1
Регистрация: 04.10.2012
Сообщений: 51
PyQt5

Обновление окна QTextEdit в реальном времени

22.11.2018, 21:13. Показов 3919. Ответов 3

Студворк — интернет-сервис помощи студентам
Есть графический интерфейс на PyQt5. В этом окне есть qtextedit - окно для ввода/вывода текста, когда пользователь кликает по кнопке "Получить данные" вызывается функция которая получает данные по COM порту, данных много и они приходят в разные промежутки времени.

Проблема состоит в том, что после того как кликаешь по кнопке "Получить данные" функция вызывается только один раз, и данные которые продолжают дальше лететь в COM порт, они уже не выводятся в qtextedit, т.е. нужно сделать так что бы qtextedit постоянно проверяло есть ли новые данные. Как это сделать к сожалению не знаю.
К сообщения прилаживаю псевдо пример, который выполняет аналогичные действия только с циклом, назв.функции my_func.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from PyQt5 import QtCore, QtGui, QtWidgets
from time import sleep
 
class Ui_MainWindow(object):
    def __init__(self):
        self.flag = 1
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("example")
        MainWindow.resize(500, 500)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
 
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(120, 18, 200, 23))
        self.pushButton.setObjectName("Получить данные")
 
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(10, 10, 10, 10))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
 
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 240, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
 
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("example", "example"))
        self.pushButton.setText(_translate("example", "Получить данные"))
        self.pushButton.clicked.connect(self.my_func)
        # Поле вывода текста
        self.plainTextEdit = QtWidgets.QPlainTextEdit()
        self.plainTextEdit.setObjectName("plainTextEdit")
        self.plainTextEdit.setObjectName("centralwidget2")
        self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget)
        self.plainTextEdit.setGeometry(QtCore.QRect(60, 160, 350, 250))
 
    def my_func(self):  #  Функция имитирует получение динамических данных. Данных приходит много и с задержкой.
        for i in range(1000):
            self.plainTextEdit.insertPlainText(str(i)+'\n') # Выводим полученные данные
            # sleep(1)  # Если закоментировать задердку, то всё ок, если раскоментировать задержку то программа виснет
 
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.11.2018, 21:13
Ответы с готовыми решениями:

обновление страницы в реальном времени
дела такие, мне на странице нужно, что бы скрипт в реальном времени изменял одно поле на странице (вставляя туда код из файла на сервере,...

Обновление picturebox в реальном времени
С com порта в реальном времени приходят значения в цикле с определенным промежутком. Например, пришло 10 значений, по ним рисуется...

Обновление данных в реальном времени
Доброго времени суток Дорогие Форумчане. Имеется GUI программка. Запускается на двух компьютерах. Оба в локальной сети. На одном из...

3
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
23.11.2018, 08:43
надо делать обновление по сигналу получения данных на компорт (ЕМНИП readyRead), иначе буфер компорта переполнится.
и после insertPlainText() можно добавить QApplication.processEvents()

Добавлено через 8 минут
http://doc.qt.io/qt-5/qtserialport-examples.html
0
2 / 2 / 1
Регистрация: 04.10.2012
Сообщений: 51
24.11.2018, 15:03  [ТС]
Цитата Сообщение от vic5710 Посмотреть сообщение
надо делать обновление по сигналу получения данных на компорт (ЕМНИП readyRead), иначе буфер компорта переполнится
я использую библиотеку serial для работы с COM портом, в консоле все работает стабильно, поэтому делаю вывод что переполнения не должно быть .

Цитата Сообщение от vic5710 Посмотреть сообщение
можно добавить QApplication.processEvents()
Добавил processEvents(), но нужного результата достигнуть не удалось, получаю ошибку(прилаживаю скриншот к сообщению), не подскажите что у меня не верно ?
Миниатюры
Обновление окна QTextEdit в реальном времени  
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
24.11.2018, 15:37
делай лучше так
Python
1
2
except Exception as e:
    print(str(e))
Цитата Сообщение от 1programmer Посмотреть сообщение
я использую библиотеку serial для работы с COM портом,
а как приход данных на порт ловишь?
http://doc.qt.io/qt-5/qtserial... ample.html
твой случай
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.11.2018, 15:37
Помогаю со студенческими работами здесь

Обновление информации в реальном времени
Здравствуйте, у меня есть таблица с последними заказами, сейчас я ее обновляю вот так: function lastResult() { $.ajax({ ...

Обновление страницы в реальном времени
Помогите, пожалуйста! Нужно, чтобы элементы на страницы автоматически обновлялись каждую секунду, НО только если там что то поменяется. Как...

Обновление данных в реальном времени
Здраввствуйте. Нужно в реальном времени некоторые данные на странице обновлять, модель которых передается на вьюшку. Данные нужно получать...

Обновление WebBrowser в реальном времени
Код с таймером + webBrowser1.refresh(); не предлагать. Есть файл в интернете, куда каждый пользователь через свой клиент может дописывать...

Обновление StringGrid из базы в реальном времени
есть файл file.dat в нем содержатся данные, потом эти данные выводятся в StringGreed циклом, как можно сделать так, что если при работе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru