pyqt5与matplotlib建立gui实现分析数据呈现系列2——具体实现

第一篇是安装部署方面的,点这里

整体逻辑

整体逻辑是这样的:
pyqt5与matplotlib建立gui实现分析数据呈现系列2——具体实现_第1张图片

关键语句

最简单的结构

官网的例子过于简单,每个功能都是分开的。这里把完整的逻辑实现了,包括:逻辑界面分离,自定义widget,matplotlib数据绘制,matplotlib figure作为widget嵌入pyqt5窗口,信号/槽关联及调用事件处理程序。

以下代码只是关键语句,非完整代码。完整代码点这里下载


# Ui_MainWindow 位于UI.py,由ui.ui转化过来的,一般来说不需要做修改
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        '''
        MainWindow是强制参数,不需要显式传递
        这里省略n行代码
        '''

        #重点看这里,这部分也是自动生成的:
        self.retranslateUi(MainWindow)  #这个函数用于关联转化空间名字
        # 在ui设计过程中建wid_locate这个widget,这里关联信号及槽,self.wid_locate.clicked是信号源,MainWindow.locate是槽,也就是我们的event_handler
        self.wid_locate.clicked.connect(MainWindow.locate)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)


# 另建一个py文件,自定义业务逻辑实现类,同时继承界面的Ui_MainWindow,实现了业务、界面分离
class Mainwindow(QtWidgets.QMainWindow,Ui_MainWindow):
    """
    gui业务逻辑模块
    """
    def __init__(self):
        super(Mainwindow, self).__init__()
        # UI 文件中Ui_MainWindow类的初始化
        self.setupUi(self)

        # 加载处理好的要绘制的数据
        polygons_plot = pd.read_csv(path, encoding='gbk')
        adj_all = polygons_plot.polygon
        vor_poly = geo.geojson_combine(adj_all)

        # 实例化自定义的widget,并绘制数据
        canvas = DemoFigureCanvas()
        canvas.axes.add_patch(PolygonPatch(vor_poly, fc='w', ec='m', alpha=1, zorder=1, lw=2))
        canvas.axes.set_xlim(121.25, 121.45)
        canvas.axes.set_ylim(31.419, 31.439)

        # 加载自定义widget到ui设置中预留的 layout框架中
        self.layout_map.addWidget(canvas)
        self.addToolBar(NavigationToolbar(canvas, self))

    # 事件处理代码
    def locate(self):
        """处理ui设计中做好的事件
        """
        print('locate')


class DemoFigureCanvas(FigureCanvas):
    """自定义widget,实现数据的plot
    继承自matplotlib的FigureCanvas
    """
    def __init__(self, parent=None):
        fig = Figure(linewidth=1)  # 创建一个Figure,为matplotlib下的figure,不是matplotlib.pyplot下面的figure
        self.axes = fig.subplots()
        FigureCanvas.__init__(self, fig)
        self.setParent(parent)

        FigureCanvas.setSizePolicy(self, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)



if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    win=Mainwindow()  # 实例化之前定义的窗口类
    win.show()
    sys.exit(app.exec_())  

结果呈现

pyqt5与matplotlib建立gui实现分析数据呈现系列2——具体实现_第2张图片

你可能感兴趣的:(matplotlib)