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

整体逻辑

整体逻辑是这样的:


关键语句
最简单的结构
官网的例子过于简单,每个功能都是分开的。这里把完整的逻辑实现了,包括:逻辑界面分离,自定义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_())
结果呈现