pyqt5 matplotlib

#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()

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值