python gui按顺序显示图片_Python GUI教程(十三):在GUI中使用pyqtgraph绘图库

本篇将会涉及:

pyqtgraph绘图库

在GUI中集成一个pyqtgraph

pyqtgraph绘图库

在GUI中集成图形工具是很多桌面程序常有的功能,最为普遍的,就是各种投资交易工具中的价格走势图。比如股票的指数走势,股票的K线图等。

在PyQt的应用程序中集成图绘功能,有很多种方案,比如:

OpenGL:一个功能强大的二维三维专业图形绘制工具;

Matplotlib:Python中很经典的图形绘制模块;

PyQtGraph:基于Qt平台,提供交互的数据显示图形绘制。

各种图形绘制方案都有自己的优点,但是论与PyQt程序的融合度,还是当属PyQtGraph。

PyQtGraph用于图形绘制有很多的优势:

拥有丰富的图形种类;

能够快速地实时更新绘图数据;

能够进行交互式的操作;

多种标记功能;

……

PyQtGraph的安装很简单,使用pip就可以直接安装:

pip install pyqtgraph

安装之后直接在Python代码中使用import 引入就可以使用了。

import pyqtgraph as pg

PyQtGraph自带一个丰富的示例模块,我们在命令行中输入:

python -m pyqtgraph.examples

就会自动打开示例手册的GUI程序:

1240

我们可以选择运行一个示例进行运行:

1240

前面我们说了PyQtGraph与PyQt的结合度很高,下面我们来看看在PyQt中如何调用PyQtGraph绘制的图形

在GUI中集成pyqtgraph图形

在PyQtGraph中,有几种绘制图形的方法:

pyqtgraph.plot():创建一个新的绘图窗口来显示数据;

PlotWidget.plot():将一组新的数据添加到现有的绘图小部件;

PlotItem.plot():将一组新的数据添加到现有的绘图小部件;

GraphicsLayout.addPlot():添加一个新的图形到一个图形层中;

根据PyQtGraph这几种绘图方式,我们在PyQt中可以在窗口部件中显示图形,也可以在一个新的窗口的显示图形。

下面我们在窗口部件中显示茅台股票近半年来的K线图,作为在PyQt中集成显示PyQtGraph图形的例子。

首先,在我们之前创建的GUI的基础上,新增一个选项卡,在其中放置一个VerticalLayout层布局:

1240

然后,按照惯例,将UI文件转换为Python文件,并新建一个Python文件引入。

1240

根据PyQtGraph的示例,我们新建一个绘制K线图的类CandlestickItem:

class CandlestickItem(pg.GraphicsObject):

def __init__(self, data):

pg.GraphicsObject.**init**(self)

self.data = data ## data must have fields: time, open, close, min, max

self.generatePicture()

def generatePicture(self):

self.picture = QtGui.QPicture()

p = QtGui.QPainter(self.picture)

p.setPen(pg.mkPen('w'))

w = (self.data[1][0] - self.data[0][0]) / 3.

for (t, open, close, min, max) in self.data:

p.drawLine(QtCore.QPointF(t, min), QtCore.QPointF(t, max))

if open > close:

p.setBrush(pg.mkBrush('g'))

else:

p.setBrush(pg.mkBrush('r'))

p.drawRect(QtCore.QRectF(t-w, open, w*2, close-open))

p.end()

def paint(self, p, *args):

p.drawPicture(0, 0, self.picture)

def boundingRect(self):

return QtCore.QRectF(self.picture.boundingRect())

然后,我们创建一个函数chart(),用于通过tushare模块获取股票的历史数据,并将数据传入之前定义好的用于生成K线图的类:

def chart():

hist_data = ts.get_hist_data('600519',start='2017-05-01',end='2017-11-24')

data_list = []

axis = []

for dates,row in hist_data.iterrows():

# 将时间转换为数字

date_time = datetime.datetime.strptime(dates,'%Y-%m-%d')

t = date2num(date_time)

# t = dict(enumerate(datetime))

open,high,close,low = row[:4]

datas = (t,open,close,low,high)

data_list.append(datas)

axis.append(t)

# print(axis)

axis_dict = dict(enumerate(axis))

item = CandlestickItem(data_list)

plt = pg.PlotWidget()

# print(plt.getAxis('bottom'))

plt.addItem(item)

plt.showGrid(x=True,y=True)

return plt

接着,在GUI程序的主类MainWindow()的init(self)中进行调用:

class MainWindow(object):

def __init__(self):

…………

self.ui.verticalLayout_3.addWidget(chart())

…………

最后我们运行代码:

1240

这样,PyQtGraph的图形作为一个窗口部件集成到了选项卡中。

下一篇,我们将介绍在GUI中使用网络和数据库。

分享到:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值