目錄
1、pyqt5安裝
2、PyCharm添加Qt Designer、PyUIC
3、Qt Designer設計界面
4、根據ui文件自動生成py文件
5、修改py文件來調用檢測程序
6、執行py文件啟動
1、pyqt5安裝
Qt Designer:一個用于創建圖形用戶界面的工具,可輕松構建復雜的用戶界面。它基于MVC架構,可以將界面設計與邏輯分離,使得開發更為便捷。在Qt Designer中,可以通過拖拽控件來靈活地調整界面,并可以實時查看控件效果。。
PyUIC:一個命令行工具,它將Qt Designer中設計的.ui文件轉換為Python代碼。這一功能極大地幫助了開發人員快速地將設計好的Qt Designer的.ui文件轉換為可用的Python代碼,從而提高了開發速度。
安裝方法:
pip install pyqt5
pip install pyqt5-tools
然后搜索“designer”就可以看到是否安裝好
2、PyCharm添加Qt Designer、PyUIC
點擊菜單欄File——選擇Setting,彈出設置界面。在設置界面中選擇Tools—>External Tools
然后重啟pycharm即可看見添加的外部工具:
3、Qt Designer設計界面
可以先打開Qt Designer,創建一個.ui然后保存到本地:
4、根據ui文件自動生成py文件
選中一個.ui,然后點擊配置好的外部工具:Tools->External Tools->pyuic5,就會自動生成對應的.py文件的。
如果實在不知道怎么配置pycharm,也可以直接用終端命令來生成:
先用cd命令進入ui文件所在的路徑下,然后執行命令:pyuic5 -o demo.py demo.ui
5、修改py文件來調用檢測程序
經過前面幾步只是對界面構建元素控件,接下來需要寫代碼來對每個控件進行點擊響應操作:
①選擇圖片上傳
②顯示環境
③啟動程序
④在setupui中添加上述點擊響應函數
⑤修改繼承類為QmainWindow并添加初始化函數
完整代碼如下:
# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'BscanObjDetection.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog
import sysfrom PyQt5 import QtCore, QtGui, QtWidgets
import torch
import torchvision
import cv2from ultralytics import YOLOclass Ui_MainWindow(QMainWindow):def __init__(self):super().__init__()self.setupUi(self)self.retranslateUi(self)def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(1131, 932)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.pushButton = QtWidgets.QPushButton(self.centralwidget)self.pushButton.setGeometry(QtCore.QRect(40, 20, 98, 26))self.pushButton.setObjectName("pushButton")self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)self.pushButton_2.setGeometry(QtCore.QRect(220, 20, 98, 26))self.pushButton_2.setObjectName("pushButton_2")self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)self.pushButton_3.setGeometry(QtCore.QRect(390, 20, 98, 26))self.pushButton_3.setObjectName("pushButton_3")self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)self.textBrowser.setGeometry(QtCore.QRect(40, 70, 1031, 61))self.textBrowser.setObjectName("textBrowser")self.label = QtWidgets.QLabel(self.centralwidget)self.label.setGeometry(QtCore.QRect(40, 180, 511, 451))self.label.setObjectName("label")self.label_2 = QtWidgets.QLabel(self.centralwidget)self.label_2.setGeometry(QtCore.QRect(590, 180, 491, 461))self.label_2.setObjectName("label_2")MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 1131, 23))self.menubar.setObjectName("menubar")MainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)# 點擊響應函數self.pushButton.clicked.connect(self.uploadImage)self.pushButton_2.clicked.connect(self.showEnvironment)self.pushButton_3.clicked.connect(self.startProgram)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.pushButton.setText(_translate("MainWindow", "上傳圖片"))self.pushButton_2.setText(_translate("MainWindow", "顯示環境"))self.pushButton_3.setText(_translate("MainWindow", "啟動程序"))self.label.setText(_translate("MainWindow", " 原圖"))self.label_2.setText(_translate("MainWindow", " 識別后圖片"))def uploadImage(self):file_dialog = QFileDialog()image_path, _ = file_dialog.getOpenFileName(self, '選擇圖片', '', 'Images (*.png *.xpm *.jpg *.bmp)')self.image_path = image_pathif image_path:# 在這里添加加載圖片的邏輯,例如顯示圖片到labelpixmap = QtGui.QPixmap(image_path)self.label.setPixmap(pixmap)self.label.setScaledContents(True)def showEnvironment(self):pytorch_version = torch.__version__torchvision_version = torchvision.__version__self.textBrowser.setText(f"PyTorch Version: {pytorch_version}\n"f"Torchvision Version: {torchvision_version}")def startProgram(self):self.textBrowser.setText(self.image_path)model = YOLO(r'C:\work\PycharmProjects\BscanObjDetection\frame_count\runs\detect\best.pt')results = model(self.image_path)annotated_frame = results[0].plot()# 圖片暫存save_image_name = self.image_path.split("/")[-1].split(".")[0] + "_pred"cv2.imwrite(f"C:\work\PycharmProjects\BscanObjDetection\data\predict\{save_image_name}.jpg", annotated_frame)# 將圖像數據轉換為QImage格式height, width, channel = annotated_frame.shapebytes_per_line = 3 * widthqimage = QtGui.QImage(annotated_frame.data, width, height, bytes_per_line, QtGui.QImage.Format_RGB888)# 將QImage轉換為QPixmappixmap = QtGui.QPixmap.fromImage(qimage)# 都執行:self.label_2.setPixmap(pixmap)self.label_2.setScaledContents(True)if __name__ == '__main__':app = QApplication(sys.argv)MainWindow1 = QMainWindow() # MainWindow1隨便改ui = Ui_MainWindow() # 隨便改ui.setupUi(MainWindow1)MainWindow1.show()sys.exit(app.exec_())
6、執行py文件啟動
效果如下視頻:
qt designer