PYQT的配置与开发(python)

   首先是python中配置PYQT,可以参照以下

PYQT5安装以及 PYQT integration 在vscode中的配置-CSDN博客

这里最难的就是找到pyqt的安装路径,找到路径跟着改就行。
使用qt设计师进行简单的界面设计
进入设计界面
pyqt简单的设计参照
转化ui为py⽂件
用python实现
代码实现的过程要注意设计的各个控件的名称要与写的代码相匹配
from PyQt5.QtWidgets import (QApplication,QLabel,QDialog,QPushButton,QMainWindow,QFileDialog)
import sys
from Ui_test4 import Ui_MainWindow
import rasterio as rio
from rasterio.plot import show
from matplotlib.backends.backend_qtagg import (
    FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
from matplotlib.figure import Figure
import numpy as np
import tifffile


class mclass(Ui_MainWindow,QMainWindow):
    def __init__(self):
        super().__init__()
 
        self.setupUi(self)
        self.static_canvas = FigureCanvas(Figure(figsize=(5, 3)))
        # Ideally one would use self.addToolBar here, but it is slightly
        # incompatible between PyQt6 and other bindings, so we just add the
        # toolbar as a plain widget instead.
        # self.horizontalLayout.addWidget(NavigationToolbar(static_canvas, self))

        # self.horizontalLayout.addWidget(self.canvas)
        # self.horizontalLayout()
        self.show()
        self.pushButtonOpen.clicked.connect(self.openfile)
        self.pushButtonNDVI.clicked.connect(self.clNDVI)
        self.pushButtonout.clicked.connect(self.clExport)
        self.filename1=""
    
    def openfile(self):
        # 打开文件对话框
        options = QFileDialog.Options()
        options = QFileDialog.ReadOnly
        file_name, _ = QFileDialog.getOpenFileName(self, '打开文件', '', 'All Files (*);;Text Files (*.txt)', options=options)
        
        # fd = QtWidgets.QFileDialog()
        # fd.setFileMode(QtWidgets.QFileDialog.FileMode.ExistingFiles)
        # fd.exec()
        # self.file_name = ''.join(fd.selectedFiles())
        if file_name:
            # 在这里处理文件
            self.filename1 = file_name
            self.filename.setText(file_name)
            dataset=rio.open(file_name)
            # print(dataset.meta)
            array = dataset.read()
            self.verticalLayout.addWidget(self.static_canvas)
            self._static_ax = self.static_canvas.figure.subplots()
            # t = np.linspace(0, 10, 501)
            # self._static_ax.plot(t)
            show((dataset,1),ax=self._static_ax)
            self._static_ax.figure.canvas.draw()
            # dataset.closed()
            
            
    def clNDVI(self):
        # red波段
        dataset=rio.open(self.filename1)
        red = dataset.read(2)
        # 近红外-NIR波段
        nir = dataset.read(3)
        # 数值类型转换
        red = red.astype('f4')
        nir = nir.astype('f4')
        np.seterr(divide='ignore', invalid='ignore')
        # ndvi 计算
        ndvi = (nir - red) / (nir + red)
        self.exportnd=ndvi
        # 
        self._static_ax.imshow(ndvi,cmap='terrain_r')
        self._static_ax.figure.canvas.draw()
        # plt.imshow(ndvi, cmap='terrain_r')
        # # 添加colorbar
        # plt.colorbar()
    def clExport(self):
        fileName_save = QFileDialog.getSaveFileName(self,
                                                    "文件保存",
                                                    '',
                                                    "tiff (*.tiff)")  # 设置文件扩展名过滤,用双分号间隔)
        tifffile.imsave(fileName_save[0], self.exportnd)
        print(fileName_save)
if __name__ == "__main__":
    app = QApplication(sys.argv)
    mui=mclass()

    sys.exit(app.exec())

此代码课实现读取一个tif数据,并进行NDVI计算,最后把结果导出的过程

最后的结果

另一种方法的实现

from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import rasterio as rio
from rasterio.plot import show
from matplotlib.backends.backend_qtagg import (
    FigureCanvasQTAgg as FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
from matplotlib.figure import Figure
import numpy as np
import tifffile

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(992, 700)
        self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.OpenFile = QtWidgets.QPushButton(parent=self.centralwidget)
        self.OpenFile.setGeometry(QtCore.QRect(710, 170, 75, 51))
        self.OpenFile.setObjectName("OpenFile")
        self.OpenFile.clicked.connect(self.Openfile)
        self.FilePath = QtWidgets.QTextEdit(parent=self.centralwidget)
        self.FilePath.setGeometry(QtCore.QRect(250, 180, 411, 41))
        self.FilePath.setObjectName("FilePath")
        self.NDVI = QtWidgets.QPushButton(parent=self.centralwidget)
        self.NDVI.setGeometry(QtCore.QRect(250, 280, 75, 51))
        self.NDVI.setObjectName("NDVI")
        self.NDVI.clicked.connect(self.clNDVI)
        self.pushButton = QtWidgets.QPushButton(parent=self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(490, 280, 75, 51))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.clExport)
        self.horizontalLayoutWidget = QtWidgets.QWidget(parent=self.centralwidget)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(240, 370, 541, 261))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 992, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)


        self.static_canvas = FigureCanvas(Figure(figsize=(5, 3)))
        self.file_name = ""
        self.baocun = ""
    def Openfile(self):
        # 打开文件对话框
        fd = QtWidgets.QFileDialog()
        fd.setFileMode(QtWidgets.QFileDialog.FileMode.ExistingFiles)
        fd.exec()
        self.file_name = ''.join(fd.selectedFiles())
        if self.file_name:
            # 在这里处理文件
            self.FilePath.setText(self.file_name)
            dataset = rio.open(self.file_name)
            # print(dataset.meta)
            array = dataset.read()
            self.horizontalLayout.addWidget(self.static_canvas)
            self._static_ax = self.static_canvas.figure.subplots()
            show((dataset,1),ax=self._static_ax)
            self._static_ax.figure.canvas.draw()
            # scene = QtWidgets.QGraphicsScene()
            # pix = QtGui.QPixmap(self.file_name)
            # item = QtWidgets.QGraphicsPixmapItem(pix)
            # scene.addItem(item)
            # self.Display.setScene(scene)
            # self.Display.setSceneRect(0, 0, dataset.width, dataset.height)
            # self.Display.show()

    def clNDVI(self):
        # red波段
        dataset = rio.open(self.file_name)
        red = dataset.read(2)
        # 近红外-NIR波段
        nir = dataset.read(3)
        # 数值类型转换
        red = red.astype('f4')
        nir = nir.astype('f4')
        np.seterr(divide='ignore', invalid='ignore')
        # ndvi 计算
        ndvi = (nir - red) / (nir + red)
        self.exportnd=ndvi
        #
        self._static_ax.imshow(ndvi,cmap='terrain_r')
        self._static_ax.figure.canvas.draw()
        # plt.imshow(ndvi, cmap='terrain_r')
        # # 添加colorbar
        # plt.colorbar()

    def clExport(self):
        file_name = self.file_name.split('/')
        filename = ""
        for i in file_name:
            if i == file_name[len(file_name) - 1]:
                break
            if i == file_name[0]:
                filename = i
                continue
            filename = filename + '/' + i
        filename = filename + '/111.tif'
        print(filename)
        tifffile.imsave(filename, self.exportnd)
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.OpenFile.setText(_translate("MainWindow", "打开文件"))
        self.NDVI.setText(_translate("MainWindow", "NDVI"))
        self.pushButton.setText(_translate("MainWindow", "导出"))


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec())

此方法不需要进行控件的命名,所有控件都是在代码中设计好的

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会编程的菜鸟啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值