以下代码仅用于测试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_())
答案 0 :(得分:0)
在GUI中使用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_())