コード例 #1
0
   def __createFigure(self):
   ##      self.__fig=mpl.figure.Figure(figsize=(8, 5),constrained_layout=True, tight_layout=None)  #单位英寸
   ##      self.__fig=mpl.figure.Figure(figsize=(8, 5))  #单位英寸
      self.__fig=mpl.figure.Figure() 
      figCanvas = FigureCanvas(self.__fig)  #创建FigureCanvas对象,必须传递一个Figure对象
      self.__fig.suptitle("suptitle:matplotlib in Qt GUI",fontsize=16, fontweight='bold')  # 总的图标题

      naviToolbar=NavigationToolbar(figCanvas, self)  #创建NavigationToolbar工具栏
      actList=naviToolbar.actions()  #关联的Action列表
      count=len(actList)       #Action的个数
      lastAction=actList[count-1]   #最后一个Action

      labCurAxes=QLabel("当前子图")
      naviToolbar.insertWidget(lastAction,labCurAxes)
      self.__comboAxes=QComboBox(self)    #子图列表,用于选择子图
      self.__comboAxes.setToolTip("选择当前子图")
      self.__comboAxes.currentIndexChanged.connect(self.do_currentAxesChaned)
      naviToolbar.insertWidget(lastAction,self.__comboAxes)

      naviToolbar.insertAction(lastAction,self.ui.actQuit)  #在最后一个Action之前插入一个Action
   ##      naviToolbar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)  #ToolButtonTextUnderIcon
      self.addToolBar(naviToolbar)  #添加作为主窗口工具栏

      splitter = QSplitter(self)
      splitter.setOrientation(Qt.Horizontal)
      splitter.addWidget(self.ui.toolBox)    #左侧控制面板
      splitter.addWidget(figCanvas)          #右侧FigureCanvas对象
      self.setCentralWidget(splitter)
コード例 #2
0
class QmyFigureCanvas(QWidget):
    def __init__(self, parent=None, toolbarVisible=True, showHint=False):
        super().__init__(parent)

        self.figure = mpl.figure.Figure()  #公共的figure属性
        figCanvas = FigureCanvas(self.figure)  #创建FigureCanvas对象,必须传递一个Figure对象

        self.naviBar = NavigationToolbar(figCanvas, self)  #公共属性naviBar
        self.__changeActionLanguage()  #改为汉语

        actList = self.naviBar.actions()  #关联的Action列表
        count = len(actList)  #Action的个数
        self.__lastActtionHint = actList[count - 1]  #最后一个Action,坐标提示标签
        self.__showHint = showHint  #是否在工具栏上显示坐标提示
        self.__lastActtionHint.setVisible(self.__showHint)  #隐藏其原有的坐标提示

        self.__showToolbar = toolbarVisible  #是否显示工具栏
        self.naviBar.setVisible(self.__showToolbar)

        layout = QVBoxLayout(self)
        layout.addWidget(self.naviBar)  #添加工具栏
        layout.addWidget(figCanvas)  #添加FigureCanvas对象
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)

        #鼠标滚轮缩放
        self.__cid = figCanvas.mpl_connect("scroll_event", self.do_scrollZoom)


##=====公共接口函数

    def setToolbarVisible(self, isVisible=True):  ##是否显示工具栏
        self.__showToolbar = isVisible
        self.naviBar.setVisible(isVisible)

    def setDataHintVisible(self, isVisible=True):  ##是否显示工具栏最后的坐标提示标签
        self.__showHint = isVisible
        self.__lastActtionHint.setVisible(isVisible)

    def redraw(self):  ##重绘曲线,快捷调用
        self.figure.canvas.draw()

    def __changeActionLanguage(self):  ##汉化工具栏
        actList = self.naviBar.actions()  #关联的Action列表
        actList[0].setText("复位")  #Home
        actList[0].setToolTip("复位到原始视图")  #Reset original view

        actList[1].setText("回退")  #Back
        actList[1].setToolTip("回退前一视图")  #Back to previous view

        actList[2].setText("前进")  #Forward
        actList[2].setToolTip("前进到下一视图")  #Forward to next view

        actList[4].setText("平动")  #Pan
        actList[4].setToolTip(
            "左键平移坐标轴,右键缩放坐标轴")  #Pan axes with left mouse, zoom with right

        actList[5].setText("缩放")  #Zoom
        actList[5].setToolTip("框选矩形框缩放")  #Zoom to rectangle

        actList[6].setText("子图")  #Subplots
        actList[6].setToolTip("设置子图")  #Configure subplots

        actList[7].setText("定制")  #Customize
        actList[7].setToolTip("定制图表参数")  #Edit axis, curve and image parameters

        actList[9].setText("保存")  #Save
        actList[9].setToolTip("保存图表")  #Save the figure

    def do_scrollZoom(self, event):  #通过鼠标滚轮缩放
        ax = event.inaxes  # 产生事件axes对象
        if ax == None:
            return

        self.naviBar.push_current(
        )  #Push the current view limits and position onto the stack,这样才可以还原
        xmin, xmax = ax.get_xbound()
        xlen = xmax - xmin
        ymin, ymax = ax.get_ybound()
        ylen = ymax - ymin

        xchg = event.step * xlen / 20  #step [scalar],positive = ’up’, negative ='down'
        xmin = xmin + xchg
        xmax = xmax - xchg
        ychg = event.step * ylen / 20
        ymin = ymin + ychg
        ymax = ymax - ychg

        ax.set_xbound(xmin, xmax)
        ax.set_ybound(ymin, ymax)
        event.canvas.draw()