Как обновить и обновить sh в PyQt5 на более высокой частоте - PullRequest
0 голосов
/ 03 мая 2020
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys


class MainWindow(QWidget):
    signal = pyqtSignal()

    def __init__(self):
        super(MainWindow, self).__init__()
        self.buttonList = list()
        self.counter = 0
        self.setUI()
        self.signal.connect(self.updatebutton)
        self.startTimer(10)
    def timerEvent(self, *args, **kwargs):
        self.signal.emit()

    def updatebutton(self):
        for button in self.buttonList:  # type: QLabel or QPushButton
            button.setText(str(self.counter))
        self.counter += 1

    def setUI(self):
        gridLayout = QGridLayout()
        for i in range(10):
            for j in range(10):
                button = QLabel(self)#QPushButton(self)
                self.buttonList.append(button)
                gridLayout.addWidget(button, i, j)
        self.setLayout(gridLayout)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
  1. Когда я устанавливаю таймер на 10 мс, все метки могут увеличивать его значение на 100 в секунду. Однако, когда я изменяю таймер на 1 мс, все метки не могут увеличить его значение на 1000 в секунду.
  2. Когда я использую кнопку вместо метки, даже таймер установлен на 100 мс, все кнопки не могут увеличить свое значение на 100 в секунду. Но когда я уменьшаю количество кнопок, например, всего 10 кнопок вместо 100, эти кнопки могут работать хорошо. 3. Я столкнулся с этой проблемой недавно, когда использовал программное обеспечение для сбора данных под названием DEWESOFT, которое может создавать множество подвиджетов или подокнов (очень похожих на QMidArea и QMidSubwindow) для рисования кривых и отображения значений высокочастотных сигналов. Поэтому я хотел бы узнать, как и почему. Интересно, как контролировать скорость обновления виджета sh и как определить предел способности refre sh интерфейса. Что мне делать, если я хочу перефразировать sh больше виджетов с высокой частотой?
  3. Позже я попытался улучшить Thread, похоже, он работает лучше, но я не знаю почему.
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import threading
import sys
import time


class MainWindow(QWidget):
    signal = pyqtSignal()

    def __init__(self):
        super(MainWindow, self).__init__()
        self.buttonList = list()
        self.counter = 0
        self.setUI()
        self.signal.connect(self.updatebutton)

        self.thread = threading.Thread(target=self.timerevent, args=())
        self.thread.setDaemon(True)
        self.thread.start()

        # self.startTimer(10)

    def timerEvent(self, *args, **kwargs):
        self.signal.emit()

    def timerevent(self):
        while True:
            self.signal.emit()
            time.sleep(0.01)

    def updatebutton(self):
        print(self.counter)
        for button in self.buttonList:  # type: QPushButton
            button.setText(str(self.counter))
        self.counter += 1

    def setUI(self):
        gridLayout = QGridLayout()
        for i in range(10):
            for j in range(10):
                button = QPushButton(self)
                self.buttonList.append(button)
                gridLayout.addWidget(button, i, j)
        self.setLayout(gridLayout)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
...