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_())
- Когда я устанавливаю таймер на 10 мс, все метки могут увеличивать его значение на 100 в секунду. Однако, когда я изменяю таймер на 1 мс, все метки не могут увеличить его значение на 1000 в секунду.
- Когда я использую кнопку вместо метки, даже таймер установлен на 100 мс, все кнопки не могут увеличить свое значение на 100 в секунду. Но когда я уменьшаю количество кнопок, например, всего 10 кнопок вместо 100, эти кнопки могут работать хорошо. 3. Я столкнулся с этой проблемой недавно, когда использовал программное обеспечение для сбора данных под названием DEWESOFT, которое может создавать множество подвиджетов или подокнов (очень похожих на QMidArea и QMidSubwindow) для рисования кривых и отображения значений высокочастотных сигналов. Поэтому я хотел бы узнать, как и почему. Интересно, как контролировать скорость обновления виджета sh и как определить предел способности refre sh интерфейса. Что мне делать, если я хочу перефразировать sh больше виджетов с высокой частотой?
- Позже я попытался улучшить 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_())