python-guiqwt使用小心得

    项目中的gui要用到图表,以前都用的matplotlib,但是这个项目的图表需要快速持续刷新,经过多方转折,听说guiqwt刷新的快,但是guiqwt的资料真的少的可怜,看了两天guiqwt的源码,算是初窥门径吧。

1.guiqwt安装

环境:winXP,python3.4,PyQt4.11.4,pyQwt5.2.1,numpy1.14.0

先安装guidata,然后再安装guiqwt,安装过程中可能出现Microsoft visual C++ 错误,是因为缺少运行库

https://www.microsoft.com/en-us/download/confirmation.aspx?id=8279(微软官网下载运行库,默认下载安装就行了)

https://www.lfd.uci.edu/~gohlke/pythonlibs/(python库的合集)

我需要CurveDialog自带的工具栏,想去掉不需要的工具按钮。

# -*- coding:utf-8 -*-

import numpy as np
from guiqwt.plot import *
from guiqwt.builder import make
from PyQt4.QtGui import *
import sys,math
from Notitle2 import youThread
from anymore import table1
from guiqwt.tools import (SelectTool, RectZoomTool, ColormapTool, HelpTool,
                          ReverseYAxisTool, BasePlotMenuTool, DeleteItemTool,
                          ItemListPanelTool, AntiAliasingTool, PrintTool,
                          DisplayCoordsTool, AxisScaleTool, SaveAsTool,
                          AspectRatioTool, ContrastPanelTool, XCSPanelTool,
                          YCSPanelTool, SnapshotTool, DummySeparatorTool,
                          CrossSectionTool, AverageCrossSectionTool, AboutTool,
                          ImageStatsTool, ExportItemDataTool, EditItemDataTool,
                          ItemCenterTool, SignalStatsTool, CopyToClipboardTool)

class PlotDemo(QWidget):
    def __init__(self):
        super(PlotDemo, self).__init__(parent=None)

        self.th=youThread()#采集数据的线程
        self.th.datasignal.connect(self.dataRd)

        self.x0 = []
        m=table1().lm
        for i in range(len(m)):
            self.x0.append(float(m[i]))

        self.setWindowTitle(u"Plot")


        win=CurveDialog(edit=False, toolbar=True)
        win.toolbar.clear()#清除原有的控件

        #win.register_all_curve_tools()#显示所有图表工具
        #win.register_standard_tools()

        win.set_default_tool(win.add_tool(SelectTool))#设置默认选择的工具
        win.add_tool(RectZoomTool)

        win.toolbar.addAction(QIcon('./images/panel/size-1.png'),'hah')#自定义的缩放工具

        win.add_tool(BasePlotMenuTool, "grid")
        win.add_tool(BasePlotMenuTool, "axes")
        win.add_tool(SaveAsTool)
        win.add_tool(CopyToClipboardTool)
        win.add_tool(PrintTool)

        self.curve = make.curve(self.x0, np.zeros(len(self.x0)), color="red")#添加曲线

        self.plot = win.get_plot()
        self.plot.add_item(self.curve)

        #左侧Y轴的id是0,下方的X轴的id是2。
        self.plot.set_axis_limits(0,0,10000)#设置Y轴范围
        self.plot.set_axis_title(0,'Counts')#设置Y轴的标题
        self.plot.set_axis_title(2,'Wavelength')#设置X轴标题

        vbox = QVBoxLayout()
        vbox.addWidget(win)
        self.setLayout(vbox)#布局显示


    def dataRd(self,l,n,data):#分线程的参数有三个,现在只需要data一个。
        if len(data) != 0:
            self.curve.set_data(self.x0,data)

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

工具栏上的工具算是自定义,但是界面的右键菜单会添加自定义的工具的内容,和默认的菜单重复了,并且有些菜单并不想要。

禁用右键菜单直接在python34/Lib/site-packages/guiqwt/plot.py文件中

注释掉271行的#self.tools.append(tool)在调用add_tool的时候右键菜单的内容不添加,下面的图是在网上截的


自定义右键菜单就需要更改这一局代码,添加上条件选择。不太清楚tool的类以及属性,只能转换成字符串过滤掉已经存在的和不想要的菜单项。


大概就是这样子,当前就遇到这些问题,,其他的遇到再说。


猜你喜欢

转载自blog.csdn.net/qq_34043925/article/details/80093633
今日推荐