Почему этот простой пример pyqtgraph не работает?

Следующий код предназначен только для проверки скорости pyqtgraph. Я ожидал получить чередующийся график навсегда. Тем не менее, ничего не отображается в виджете после выполнения этого кода. В чем проблема?

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from random import randint, uniform
from math import *
import pyqtgraph as pg
import time

class Example(QWidget):

    def __init__(self):
        super().__init__()
        self.x=pg.PlotWidget(self)
        self.x.setMinimumHeight(400)
        self.x.setMinimumWidth(400)
        self.setWindowState(Qt.WindowMaximized)
        self.u=[i+uniform(1,30) for i in range(1000)]
        self.v=[-i+uniform(1,30) for i in range(1000)]
        self.show()

    def Run(self):
        while 1:
            self.x.clear()
            self.x.plot(self.u)
            self.x.clear()
            self.x.plot(self.v)

app=QApplication(sys.argv)
ex=Example()
ex.Run()
sys.exit(app.exec_())

1 ответ

Обычно плохая идея использовать цикл while в графическом интерфейсе. Проблема в том, что он мешает GUI оставаться отзывчивым и обрабатывать все события GUI.

Можно использовать таймер, например, простой QTimer, Чтобы переключиться между двумя различными наборами данных для построения графика, вы также должны ввести некоторый механизм, который должен быть показан.

import sys
#from PyQt5.QtWidgets import *
#from PyQt5.QtCore import *
from PyQt4 import QtGui, QtCore
from random import randint, uniform
import pyqtgraph as pg

class Example(QtGui.QWidget):

    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.x=pg.PlotWidget(self)
        self.x.setMinimumHeight(400)
        self.x.setMinimumWidth(400)
        self.setWindowState(QtCore.Qt.WindowMaximized)
        self.u=[i+uniform(1,30) for i in range(1000)]
        self.v=[-i+uniform(1,30) for i in range(1000)]
        self.switch = True
        self.show()

    def start(self):
        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.run)
        self.timer.start(500)

    def run(self):
        if self.switch:
            self.x.clear()
            self.x.plot(self.u)
        else:
            self.x.clear()
            self.x.plot(self.v)
        self.switch = not self.switch

app=QtGui.QApplication(sys.argv)
ex=Example()
ex.start()
sys.exit(app.exec_())
Другие вопросы по тегам