pyqt5 matplotlib

    xiaoxiao2025-07-23  5

    #coding:utf-8 # 导入matplotlib模块并使用Qt5Agg import os from PIL import Image import matplotlib matplotlib.use('Qt5Agg') # 使用 matplotlib中的FigureCanvas (在使用 Qt5 Backends中 FigureCanvas继承自QtWidgets.QWidget) from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from PyQt5 import QtCore, QtWidgets,QtGui from PyQt5.QtCore import QCoreApplication from PyQt5.QtWidgets import QApplication import matplotlib.pyplot as plt import sys import numpy as np num_point = 4 position={ 0:[160,93], 1:[150,212], 2:[284,141], 3:[350,198] } class My_Main_window(QtWidgets.QDialog):#QtWidgets.QDialog, def __init__(self,parent=None): # 父类初始化方法 super(My_Main_window,self).__init__(parent) # 几个QWidgets self.figure = plt.figure() self.canvas = FigureCanvas(self.figure) self.button_plot = QtWidgets.QPushButton("绘制") self.button_plot_1 = QtWidgets.QPushButton("最短路径") self.button_plot_2 = QtWidgets.QPushButton("关闭窗口") self.button_plot_3 = QtWidgets.QPushButton("路径规划") # self.button_plot_3 = QtWidgets.QPushButton("绘制到的最短距离") self.lineEdit = QtWidgets.QLineEdit() self.lineEdit.setPlaceholderText('从该点到其他位置的最短距离') # 变量 self.lam=np.zeros([num_point,num_point]) # self.line= int(self.lineEdit.text()) # print(self.line) # 连接事件 self.button_plot.clicked.connect(self.plot_map) self.button_plot_1.clicked.connect(self.kijskstra) self.button_plot_2.clicked.connect(QCoreApplication.instance().quit) #self.button_plot_3.clicked.connect() self.lineEdit.returnPressed.connect(self.plot_line) # 设置布局(先布局widget再加Layout) layout = QtWidgets.QVBoxLayout() layout.addWidget(self.button_plot_2) layout.addWidget(self.canvas) layout1 = QtWidgets.QHBoxLayout() layout1.addWidget(self.button_plot) layout1.addWidget(self.button_plot_1) layout1.addWidget(self.button_plot_3) layout1.addWidget(self.lineEdit) layout_all = QtWidgets.QVBoxLayout() layout_all.addLayout(layout) layout_all.addLayout(layout1) self.setLayout(layout_all) # layout.addWidget(self.button_plot_3) def plot_line(self): show_point=int(self.lineEdit.text()) line_style = ['ro--','bo-','yo--','go--'] img = Image.open(os.path.join('test' + '.png')) ax = self.figure.add_axes([0,0,1,1]) ax.cla() # 画图 ax.imshow(img) ax.axis('off') # 关掉坐标轴为 off # print('dss') for i in range(num_point): offset = np.random.rand(1)*3 if i == show_point: continue mid_point = int(self.lam[show_point][i]) # print(mid_point) start_point = i end_point = show_point while 1: ax.plot([position[start_point][0]+offset*i,position[mid_point][0]+offset*i], [position[start_point][1]+offset*i,position[mid_point][1]+offset*i],line_style[i]) if mid_point==end_point: break else: start_point = mid_point mid_point = self.lam[show_point][mid_point] self.canvas.draw() # 关闭窗口 def close_windows(self): qApp = QApplication.instance() qApp.quit() # 连接的绘制的方法 def plot_map(self): print('dss') img = Image.open(os.path.join('test' + '.png')) ax = self.figure.add_axes([0,0,1,1]) # 画图 ax.imshow(img) ax.axis('off') # 关掉坐标轴为 off self.canvas.draw() # 最短路径 def kijskstra(self): for startpoint in range(4): A=np.array([[0,5,7,10], [5,0,7,3], [7,7,0,2], [10,3,2,0]]) A[A==0]=999#float('inf') l=len(A) V=set(range(l)) s={startpoint} p=np.zeros(l) T=np.repeat(float('inf'),l) k=startpoint flag=1 while flag==1: if s==V: flag=0 else: T_cop=V-s loc=[i for i in range(l) if A[k][i] != float('inf')] for i in loc: if p[k]+A[k][i]<T[i]: T[i]=p[k]+A[k][i] self.lam[startpoint][i]=k k=[i for i in T_cop if T[i]==min([T[i] for i in T_cop])][0] p[k]=min([T[i] for i in T_cop]) s.add(k) # print(startpoint) self.lam[startpoint][startpoint]=startpoint # print('lam=',self.lam[startpoint]) # print('p=',p) # 运行程序 if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) main_window = My_Main_window() main_window.show() app.exec() # 把鼠标放到那,就显示那里的坐标 import numpy as np import matplotlib.animation as animation import matplotlib.pyplot as plt import matplotlib matplotlib.use('Qt5Agg') from PIL import Image def on_press(event): print("my position:" ,event.button,event.xdata, event.ydata) fig = plt.figure() img = Image.open('test.png') #updata = True plt.imshow(img, animated= True) fig.canvas.mpl_connect('button_press_event', on_press) plt.show()

     

     

    最新回复(0)