中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

網(wǎng)站建設屬于seo數(shù)據(jù)

網(wǎng)站建設屬于,seo數(shù)據(jù),做傳銷網(wǎng)站,蘋果智能手表被禁止輸入美國市場前面我們大致把各個代碼塊梳理出來了,但是還是不知道從那塊開始,我們這里主要先通過ui頁面的元素去推理整個執(zhí)行過程,我們首先需要知道ui功能里面有那些組件 qt設計師基礎控件 Qt Designer 是一個圖形界面設計工具,用于創(chuàng)建 Qt 應…

前面我們大致把各個代碼塊梳理出來了,但是還是不知道從那塊開始,我們這里主要先通過ui頁面的元素去推理整個執(zhí)行過程,我們首先需要知道ui功能里面有那些組件

qt設計師基礎控件

Qt Designer 是一個圖形界面設計工具,用于創(chuàng)建 Qt 應用程序的用戶界面。它提供了豐富的控件(也稱為窗口部件或widgets)來構(gòu)建各種類型的用戶界面

類型窗口部件說明
基礎控件QLabel顯示靜態(tài)文本或圖像
基礎控件QPushButton用戶可以點擊的按鈕
基礎控件QLineEdit單行文本輸入框
基礎控件QTextEdit多行文本編輯器
基礎控件QCheckBox復選框,用戶可以選擇或取消選擇
基礎控件QRadioButton單選按鈕,用于一組互斥的選擇項
基礎控件QComboBox下拉列表框,用戶可以從列表中選擇一項
基礎控件QSlider滑塊控件,用于數(shù)值的選擇范圍
基礎控件QSpinBox/QDoubleSpinBox數(shù)字輸入框,用戶可以輸入整數(shù)或浮點數(shù)
基礎控件QProgressBar進度條,顯示任務完成的進度
基礎控件QToolButton工具按鈕,常用于工具欄上,支持彈出菜單
基礎控件QGraphicsView圖形視圖,用于顯示復雜的圖形場景
布局管理器QVBoxLayout垂直布局管理器,用于管理控件的垂直排列
布局管理器QHBoxLayout水平布局管理器,用于管理控件的水平排列
布局管理器QGridLayout網(wǎng)格布局管理器,用于將控件放置在網(wǎng)格單元格中
布局管理器QFormLayout表單布局管理器,用于創(chuàng)建標簽和控件成對出現(xiàn)的布局
布局管理器QStackedLayout堆疊布局管理器,用于堆疊多個控件,一次只顯示一個
容器QWidget最基礎的窗口部件,可以包含其他控件
容器QFrame帶邊框的容器,可以設置不同的樣式
容器QGroupBox帶標題的框架,常用于分組控件
容器QTabWidget帶標簽頁的容器,允許用戶在多個頁面之間切換
容器QScrollArea滾動區(qū)域,當內(nèi)容超過顯示區(qū)域時提供滾動條
容器QDockWidget碼頭窗口,通常用于顯示附加信息或工具
對話框QMessageBox提示信息對話框,用于顯示警告、錯誤等消息
對話框QFileDialog文件對話框,用于選擇文件或目錄
對話框QColorDialog顏色選擇對話框,用于選取顏色
對話框QFontDialog字體選擇對話框,用于選取字體
其他QMenuBar菜單欄,通常位于窗口頂部
其他QToolBar工具欄,通常包含一些快捷按鈕
其他QStatusBar狀態(tài)欄,顯示臨時的消息

我們打開窗口的時候會發(fā)現(xiàn)中間有一塊顯示大屏,如下

我們先看看怎么實現(xiàn)這個大屏顯示,打開qt設計師

新建項目目錄

我們先不在原本的項目上找,先根據(jù)已有的信息參考源代碼進行推斷

一、添加主窗口

1、主窗口、窗口大小、標題

1、打開Qt Designer。
2、選擇“文件” > “新建”,創(chuàng)建一個新的Qt Designer文檔。
3、在“選擇類”對話框中,選擇QMainWindow作為基礎類,并命名為mainWindow。

4、添加布局,layouts--Horizontal layouts--- 添加后選擇類名右鍵--布局--水平布局,然后將我們剛才添加的Horizontal layouts刪除
5、設置窗口大小(geometry關鍵字)為800x600像素,并設置窗口標題(windowTitle)為 "主頁"

2、添加工具欄、移除菜單欄

3、組件重命名

mainWindow
centralwidget
sa_main
scrollAreaWidgetContents
sb_main
toolBar

這里我們給布局內(nèi)的各個元素重命名后,我們在ui轉(zhuǎn)py會轉(zhuǎn)換為各個關鍵字方便使用

4、布局重命名

我們上面臨時用了下布局樣式這里可能叫_2什么的,修改為下圖

5、工具欄調(diào)整到側(cè)邊

6、添加動作、ui轉(zhuǎn)py

#動作文本名稱如下
Save_All 
Add_Mode 
Add_Script

?ui轉(zhuǎn)換

pyuic5 -o main.py main.ui

代碼

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'main.ui'
#
# Created by: PyQt5 UI code generator 5.15.11
#
# 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 import QtCore, QtGui, QtWidgetsclass Ui_mainWindow(object):def setupUi(self, mainWindow):mainWindow.setObjectName("mainWindow")mainWindow.resize(800, 600)self.centralwidget = QtWidgets.QWidget(mainWindow)self.centralwidget.setObjectName("centralwidget")self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)self.horizontalLayout.setObjectName("horizontalLayout")self.sa_main = QtWidgets.QScrollArea(self.centralwidget)self.sa_main.setWidgetResizable(True)self.sa_main.setObjectName("sa_main")self.scrollAreaWidgetContents = QtWidgets.QWidget()self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 762, 551))self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")self.sa_main.setWidget(self.scrollAreaWidgetContents)self.horizontalLayout.addWidget(self.sa_main)mainWindow.setCentralWidget(self.centralwidget)self.sb_main = QtWidgets.QStatusBar(mainWindow)self.sb_main.setObjectName("sb_main")mainWindow.setStatusBar(self.sb_main)self.toolBar = QtWidgets.QToolBar(mainWindow)self.toolBar.setObjectName("toolBar")mainWindow.addToolBar(QtCore.Qt.LeftToolBarArea, self.toolBar)self.actionSave_All = QtWidgets.QAction(mainWindow)self.actionSave_All.setObjectName("actionSave_All")self.actionAdd_Mode = QtWidgets.QAction(mainWindow)self.actionAdd_Mode.setObjectName("actionAdd_Mode")self.actionAdd_Script = QtWidgets.QAction(mainWindow)self.actionAdd_Script.setObjectName("actionAdd_Script")self.retranslateUi(mainWindow)QtCore.QMetaObject.connectSlotsByName(mainWindow)def retranslateUi(self, mainWindow):_translate = QtCore.QCoreApplication.translatemainWindow.setWindowTitle(_translate("mainWindow", "主頁"))self.toolBar.setWindowTitle(_translate("mainWindow", "toolBar"))self.actionSave_All.setText(_translate("mainWindow", "Save_All "))self.actionAdd_Mode.setText(_translate("mainWindow", "Add_Mode "))self.actionAdd_Script.setText(_translate("mainWindow", "Add_Script"))

7、打開主窗口

import ctypes
import sysfrom PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import QDockWidget, QMainWindow, QApplicationimport state
from ui.show import Ui_DockWidget
from ui.main import Ui_mainWindowclass MainWindow(QMainWindow, Ui_mainWindow):def __init__(self):super(MainWindow, self).__init__()self.setupUi(self)  # 設置UI布局self.retranslateUi(self)  # 重新翻譯UI組件的文字if __name__ == '__main__':# 獲取屏幕寬度和高度screen_width = ctypes.windll.user32.GetSystemMetrics(0)screen_height = ctypes.windll.user32.GetSystemMetrics(1)#初始化QT應用app = QApplication(sys.argv)ratio = screen_width / 2560  # 分辨率比例# 設置全局字體大小  計算字體大小base_font_size = 13# 基準字體大小,適合1920*1080分辨率new_font_size = int(base_font_size * ratio)font = QFont("Arial", new_font_size)# 子控件的寬度item_width = 320item_height = 240item_height_min = 60window_main = MainWindow()window_main.show()  #開啟主窗口sys.exit(app.exec_())  # 監(jiān)聽消息不關閉

8、設置主窗口樣式

class MainWindow(QMainWindow, Ui_mainWindow):def __init__(self):super(MainWindow, self).__init__()self.setupUi(self)  # 設置UI布局self.retranslateUi(self)  # 重新翻譯UI組件的文字#修改窗口樣式為黑灰色,高亮self.set_ui()#設置主窗口樣式def set_ui(self):# 設置主題樣式為 Flatwhite# 創(chuàng)建 QtitanRibbon 實例from qt_material import apply_stylesheetapply_stylesheet(app, theme='dark_pink.xml')self.setStyleSheet("""QScrollBar::handle:horizontal {background-color: #A50F2C;  /* 設置滑塊顏色 */}QScrollBar::handle:horizontal:hover{background-color: #FF1744;  /* 設置滑塊顏色 */} QPushButton:hover{background-color: #DFC472;  /* 設置顏色 */}QPlainTextEdit{padding: 0px;margin: 0px;}QPushButton{padding: 0px;margin: 1px;}""" + "font-family: {}; font-size: {}pt;".format(font.family(), font.pointSize()))

9、滾動可擴展窗口

class MainWindow(QMainWindow, Ui_mainWindow):def __init__(self):。。。#sa_main是我們之前定義的QScrollArea 也就是滾動條類型的容器#我們在滾動條布局sa_main內(nèi)放了一個普通部件QWidget()  ,self.sa_main.setWidget(self.container_widget)#這樣一來,如果普通部件內(nèi)的數(shù)據(jù)超出了顯示范圍,就能通過滾動條查看了self.g_box = QGridLayout()#創(chuàng)建了一個普通的窗口部件(QWidget),這個部件將用于包含所有的子控件,并且可以獨立于其父窗口進行尺寸調(diào)整,為了可以讓g_布局超過窗口大小self.container_widget = QWidget()  # 創(chuàng)建一個中間部件self.container_widget.setLayout(self.g_box)  # 將網(wǎng)格布局設置給中間部件self.g_box.setAlignment(Qt.AlignTop | Qt.AlignLeft)  # 布局 左上對齊self.g_box.setContentsMargins(0, 0, 0, 0)  # 邊距self.g_box.setAlignment(Qt.AlignTop)self.sa_main.setWidget(self.container_widget)  # 將中間部件設置為QScrollArea的子部件# 獲取縱向滾動條控件vertical_scrollbar = self.findChild(QScrollArea)self.v_scrollbar = vertical_scrollbar.verticalScrollBar()self.setWindowFlags(Qt.WindowStaysOnTopHint)self.row = 0self.column = -1self.run_times = 1self.column_step = 310# 獲取主窗口的狀態(tài)欄對象self.statusbar = self.statusBar()# 設置狀態(tài)欄文本self.statusbar.showMessage('歡迎使用')

10、延遲布局更新

當窗口尺寸變化或其他條件滿足時(例如計時器觸發(fā)),重新計算并更新網(wǎng)格布局中的控件位置,使其適應當前窗口的大小

class MainWindow(QMainWindow, Ui_mainWindow):def __init__(self):。。。# 所有數(shù)據(jù)self.datas = []# 創(chuàng)建一個計時器,用于延遲布局self.timer = QTimer(self)self.timer.setSingleShot(True)  # 設置為單次觸發(fā)self.timer.timeout.connect(self.update_layout)def update_layout(self):try:# 獲取主窗口的寬度width = self.centralWidget().width()# 計算每行可以容納的組件數(shù)量num_per_row = (width) // (self.column_step * ratio)  # 假設每個組件的寬度為200if num_per_row < 1:num_per_row = 1# 清空當前布局for i in reversed(range(self.g_box.count())):self.g_box.itemAt(i).widget().setParent(None)# 重新添加組件到網(wǎng)格布局for i, data in enumerate(self.datas):self.row = int(i // num_per_row)self.column = int(i % num_per_row)self.g_box.addWidget(data["f_item"], self.row, self.column)except:pass

11、全量代碼

import ctypes
import sysfrom PyQt5.QtCore import Qt, QTimer, QObject, pyqtSignal
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import QDockWidget, QMainWindow, QApplication, QGridLayout, QWidget, QScrollAreafrom ui.show import Ui_DockWidget
from ui.main import Ui_mainWindowclass MainWindow(QMainWindow, Ui_mainWindow):def __init__(self):super(MainWindow, self).__init__()self.setupUi(self)  # 設置UI布局self.retranslateUi(self)  # 重新翻譯UI組件的文字#修改窗口樣式為黑灰色,高亮self.set_ui()# self.setWindowIcon(QIcon("datas/logo.png"))  設置圖標self.setWindowTitle(f" 修改主頁標題")self.resize(640, 900)  # 窗口的長寬self.move(0, 300)  # 窗口的起點位置#sa_main是我們之前定義的QScrollArea 也就是滾動條類型的容器#我們在滾動條布局sa_main內(nèi)放了一個普通部件QWidget()  ,self.sa_main.setWidget(self.container_widget)#這樣一來,如果普通部件內(nèi)的數(shù)據(jù)超出了顯示范圍,就能通過滾動條查看了self.g_box = QGridLayout()#創(chuàng)建了一個普通的窗口部件(QWidget),這個部件將用于包含所有的子控件,并且可以獨立于其父窗口進行尺寸調(diào)整,為了可以讓g_布局超過窗口大小self.container_widget = QWidget()  # 創(chuàng)建一個中間部件self.container_widget.setLayout(self.g_box)  # 將網(wǎng)格布局設置給中間部件self.g_box.setAlignment(Qt.AlignTop | Qt.AlignLeft)  # 布局 左上對齊self.g_box.setContentsMargins(0, 0, 0, 0)  # 邊距self.g_box.setAlignment(Qt.AlignTop)self.sa_main.setWidget(self.container_widget)  # 將中間部件設置為QScrollArea的子部件# 獲取縱向滾動條控件vertical_scrollbar = self.findChild(QScrollArea)self.v_scrollbar = vertical_scrollbar.verticalScrollBar()self.setWindowFlags(Qt.WindowStaysOnTopHint)self.row = 0self.column = -1self.run_times = 1self.column_step = 310# 獲取主窗口的狀態(tài)欄對象self.statusbar = self.statusBar()# 設置狀態(tài)欄文本self.statusbar.showMessage('歡迎使用')# 所有數(shù)據(jù)self.datas = []# 創(chuàng)建一個計時器,用于延遲布局self.timer = QTimer(self)self.timer.setSingleShot(True)  # 設置為單次觸發(fā)self.timer.timeout.connect(self.update_layout)#更新布局def update_layout(self):try:# 獲取主窗口的寬度width = self.centralWidget().width()# 計算每行可以容納的組件數(shù)量num_per_row = (width) // (self.column_step * ratio)  # 假設每個組件的寬度為200if num_per_row < 1:num_per_row = 1# 清空當前布局for i in reversed(range(self.g_box.count())):self.g_box.itemAt(i).widget().setParent(None)# 重新添加組件到網(wǎng)格布局for i, data in enumerate(self.datas):self.row = int(i // num_per_row)self.column = int(i % num_per_row)self.g_box.addWidget(data["f_item"], self.row, self.column)except:pass#設置主窗口樣式def set_ui(self):# 設置主題樣式為 Flatwhite# 創(chuàng)建 QtitanRibbon 實例from qt_material import apply_stylesheetapply_stylesheet(app, theme='dark_pink.xml')self.setStyleSheet("""QScrollBar::handle:horizontal {background-color: #A50F2C;  /* 設置滑塊顏色 */}QScrollBar::handle:horizontal:hover{background-color: #FF1744;  /* 設置滑塊顏色 */} QPushButton:hover{background-color: #DFC472;  /* 設置顏色 */}QPlainTextEdit{padding: 0px;margin: 0px;}QPushButton{padding: 0px;margin: 1px;}""" + "font-family: {}; font-size: {}pt;".format(font.family(), font.pointSize()))if __name__ == '__main__':# 獲取屏幕寬度和高度screen_width = ctypes.windll.user32.GetSystemMetrics(0)screen_height = ctypes.windll.user32.GetSystemMetrics(1)#初始化QT應用app = QApplication(sys.argv)ratio = screen_width / 2560  # 分辨率比例# 設置全局字體大小  計算字體大小base_font_size = 13# 基準字體大小,適合1920*1080分辨率new_font_size = int(base_font_size * ratio)font = QFont("Arial", new_font_size)# 子控件的寬度item_width = 320item_height = 240item_height_min = 60window_main = MainWindow()window_main.show()  #開啟主窗口sys.exit(app.exec_())  # 監(jiān)聽消息不關閉

二、添加UI預覽窗口

QDockWidget 碼頭窗口,通常用于顯示附加信息或工具

1、預覽窗口定義

1、新建項目-窗口部件--QDockWidget (483X565)

2、添加兩個label? 大小480 X 270 ,設置樣式表

3、添加按鈕 修改按鈕文本 + -

#尋路標簽背景顏色為黑色
background-color: rgb(0, 0, 0);#標簽背景顏色為灰色
background-color: rgb(20, 20, 20);

?

?這里圖里搞錯了,yolo那個label應該設置為background-color: rgb(20, 20, 20);

2、組件名稱修改

DockWidget
dockWidgetContents
bt_jia
bt_jian
lb_xunlu
lb_yolov

3、label最大尺寸修改

尋路

yolo

4、調(diào)整各個組件前后臺

jia 和jian調(diào)整為前臺

xunlu和yolo調(diào)整到后臺??

(直接右鍵組件--放到前面/放到后面)

5、ui轉(zhuǎn)py

pyuic5 -o show.py show.ui

py代碼

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'show.ui'
#
# Created by: PyQt5 UI code generator 5.15.11
#
# 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 import QtCore, QtGui, QtWidgetsclass Ui_DockWidget(object):def setupUi(self, DockWidget):DockWidget.setObjectName("DockWidget")DockWidget.resize(483, 565)self.dockWidgetContents = QtWidgets.QWidget()self.dockWidgetContents.setObjectName("dockWidgetContents")self.lb_xunlu = QtWidgets.QLabel(self.dockWidgetContents)self.lb_xunlu.setGeometry(QtCore.QRect(0, 0, 480, 270))self.lb_xunlu.setMinimumSize(QtCore.QSize(0, 0))self.lb_xunlu.setMaximumSize(QtCore.QSize(16777215, 16777215))self.lb_xunlu.setStyleSheet("background-color: rgb(0, 0, 0);")self.lb_xunlu.setText("")self.lb_xunlu.setObjectName("lb_xunlu")self.lb_yolov = QtWidgets.QLabel(self.dockWidgetContents)self.lb_yolov.setGeometry(QtCore.QRect(0, 270, 480, 270))self.lb_yolov.setMinimumSize(QtCore.QSize(480, 270))self.lb_yolov.setMaximumSize(QtCore.QSize(1920, 1080))self.lb_yolov.setStyleSheet("background-color: rgb(20, 20, 20);")self.lb_yolov.setText("")self.lb_yolov.setObjectName("lb_yolov")self.bt_jia = QtWidgets.QPushButton(self.dockWidgetContents)self.bt_jia.setGeometry(QtCore.QRect(30, 40, 31, 28))self.bt_jia.setObjectName("bt_jia")self.bt_jian = QtWidgets.QPushButton(self.dockWidgetContents)self.bt_jian.setGeometry(QtCore.QRect(60, 40, 31, 28))self.bt_jian.setObjectName("bt_jian")self.lb_yolov.raise_()self.lb_xunlu.raise_()self.bt_jia.raise_()self.bt_jian.raise_()DockWidget.setWidget(self.dockWidgetContents)self.retranslateUi(DockWidget)QtCore.QMetaObject.connectSlotsByName(DockWidget)def retranslateUi(self, DockWidget):_translate = QtCore.QCoreApplication.translateDockWidget.setWindowTitle(_translate("DockWidget", "DockWidget"))self.bt_jia.setText(_translate("DockWidget", "+"))self.bt_jian.setText(_translate("DockWidget", "-"))

三、主窗口添加子窗口

1、添加自定義信號

class MySignal(QObject):# 無參數(shù)信號,可能用于觸發(fā)顯示某個路徑或軌跡的操作mysig_show_xunlu = pyqtSignal()  # 無參數(shù)信號,可能與YOLOv模型有關,用于觸發(fā)顯示模型輸出或其他相關操作mysig_show_yolov = pyqtSignal()  

2、添加預覽窗口顯示類


class FormShow(QDockWidget, Ui_DockWidget):def __init__(self, parent=None):super(QDockWidget, self).__init__(parent)self.parent = parentself.setParent(parent)self.setupUi(self)self.set_ui()# self.timer = QTimer()self.setWindowTitle("檢測預覽")self.lb_yolov.setScaledContents(True)self.lb_yolov.setAlignment(Qt.AlignCenter)self.lb_xunlu.setAlignment(Qt.AlignCenter)self.move(0, 0)self.setWindowFlags(Qt.WindowStaysOnTopHint)self.window_height = int(270 * ratio)self.window_width = int(480 * ratio)self.setMinimumSize(self.window_width, self.window_height * 2)self.bt_jia.clicked.connect(self.clicked_jia)self.bt_jian.clicked.connect(self.clicked_jian)def set_ui(self):passdef clicked_jia(self):if self.window_height + 108 * ratio > 1080 * ratio:returnself.window_height += int(108 * ratio)self.window_width += int(190 * ratio)self.lb_xunlu.setFixedHeight(self.window_height)if self.width() >= self.lb_yolov.width() + self.lb_xunlu.width():self.lb_yolov.move(self.lb_xunlu.width(), 0)else:self.lb_yolov.move(0, self.lb_xunlu.height())self.lb_yolov.setFixedHeight(self.window_height)self.lb_yolov.setFixedWidth(self.window_width)def clicked_jian(self):if self.window_height - 108 * ratio < 270 * ratio:returnself.window_height -= int(108 * ratio)self.window_width -= int(190 * ratio)self.lb_xunlu.setFixedHeight(self.window_height)if self.width() >= self.lb_yolov.width() + self.lb_xunlu.width():self.lb_yolov.move(self.lb_xunlu.width(), 0)else:self.lb_yolov.move(0, self.lb_xunlu.height())self.lb_yolov.setFixedHeight(self.window_height)self.lb_yolov.setFixedWidth(self.window_width)def closeEvent(self, event):self.parent.action_isShow.setChecked(False)def resizeEvent(self, event):if self.width() >= self.lb_yolov.width() + self.lb_xunlu.width():self.lb_yolov.move(self.lb_xunlu.width(), 0)else:self.lb_yolov.move(0, self.lb_xunlu.height())

3、主窗口 添加 預覽窗口顯示

    def connect_set(self):# 創(chuàng)建一個頂級菜單self.menu = self.menuBar()self.menu_view = self.menu.addMenu("視圖")# 創(chuàng)建一個動作self.action_isShow = QAction("顯示檢測結(jié)果窗口", self)self.action_isShow.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_F11))self.action_isShow.triggered.connect(self.hotkey_isShow)self.action_isShow.setCheckable(True)self.action_isShow.setChecked(True)self.menu_view.addAction(self.action_isShow)self.hotkey_isShow()#打開預測窗口def hotkey_isShow(self):# 嘗試創(chuàng)建懸浮窗口實例if not hasattr(self, "fromshow"):self.fromshow = FormShow(self)  # 創(chuàng)建懸浮窗口實例print(111111)self.addDockWidget(Qt.TopDockWidgetArea, self.fromshow)  # 添加懸浮窗口到主窗口

4、添加信號槽

    # 綁定信號槽def connect_set(self):...#添加信號self.sg = MySignal()#綁定信號槽self.sg.mysig_show_xunlu.connect(self.show_xunlu)  #尋路self.sg.mysig_show_yolov.connect(self.show_yolov)  #推理

5、添加信號槽及對應函數(shù)

這里先偷個懶,直接使用本地圖片顯示上去,后續(xù)整晚之后在加具體功能

    def show_xunlu(self, image_path="./datas/111.png"):# 加載本地圖片pixmap = QPixmap(image_path)# 設置圖片到 lb_xunlu 控件self.fromshow.lb_xunlu.setPixmap(pixmap)# 設置寬度固定,高度自適應self.fromshow.window_width = int(self.fromshow.window_height * pixmap.width() / pixmap.height())self.fromshow.lb_xunlu.setFixedHeight(self.fromshow.window_height)self.fromshow.lb_xunlu.setFixedWidth(self.fromshow.window_width)self.fromshow.lb_xunlu.setScaledContents(True)def show_yolov(self, image_path="./datas/111.png"):print(2222)# 加載本地圖片pixmap1 = QPixmap(image_path)# 設置圖片到 lb_yolov 控件self.fromshow.lb_yolov.setPixmap(pixmap1)# 根據(jù)窗口寬度調(diào)整 lb_yolov 的位置if self.fromshow.width() >= self.fromshow.lb_yolov.width() + self.fromshow.lb_xunlu.width():self.fromshow.lb_yolov.move(self.fromshow.lb_xunlu.width(), 0)else:self.fromshow.lb_yolov.move(0, self.fromshow.lb_xunlu.height())

6、發(fā)送信號

我們在init中定義一個新的定時器,每5s觸發(fā)on_timer_timeout函數(shù),然后會發(fā)送mysig_show_xunlu和mysig_show_yolov信號,信號槽接收到后,觸發(fā)show_xunlu 和show_yolov 函數(shù),去顯示圖片

    def __init__(self):。。。# 綁定信號槽self.connect_set()# 創(chuàng)建定時器  用于周期顯示圖片self.timer = QTimer(self)self.timer.timeout.connect(self.on_timer_timeout)self.timer.start(5000)  # 每5秒觸發(fā)一次def on_timer_timeout(self):# 每隔一段時間自動顯示圖片#emit() 方法用于發(fā)送信號self.sg.mysig_show_xunlu.emit()self.sg.mysig_show_yolov.emit()

?

然我們后面使用的時候不會這么草率的發(fā)送信號,而是通過循環(huán)截取地圖,和屏幕中yolo推理當前屏幕圖片進行顯示的

7、全量代碼

import ctypes
import sys# 導入PyQt5模塊
from PyQt5.QtCore import Qt, QTimer, QObject, pyqtSignal
from PyQt5.QtGui import QFont, QImage, QPixmap, QKeySequence
from PyQt5.QtWidgets import QDockWidget, QMainWindow, QApplication, QGridLayout, QWidget, QScrollArea, QAction# 導入UI文件生成的類
from ui.show import Ui_DockWidget
from ui.main import Ui_mainWindowclass MySignal(QObject):# 無參數(shù)信號,可能用于觸發(fā)顯示某個路徑或軌跡的操作mysig_show_xunlu = pyqtSignal()# 無參數(shù)信號,可能與YOLOv模型有關,用于觸發(fā)顯示模型輸出或其他相關操作mysig_show_yolov = pyqtSignal()# 定義FormShow類,繼承自QDockWidget和Ui_DockWidget
class FormShow(QDockWidget, Ui_DockWidget):def __init__(self, parent=None):super(QDockWidget, self).__init__(parent)  # 調(diào)用父類構(gòu)造函數(shù)self.parent = parent  # 保存父窗口引用self.setParent(parent)  # 設置父窗口self.setupUi(self)  # 初始化UI界面self.set_ui()  # 自定義設置UI界面# 設置窗口標題self.setWindowTitle("檢測預覽")# 設置標簽控件屬性self.lb_yolov.setScaledContents(True)self.lb_yolov.setAlignment(Qt.AlignCenter)self.lb_xunlu.setAlignment(Qt.AlignCenter)# 移動窗口位置self.move(0, 0)# 設置窗口保持在最頂層self.setWindowFlags(Qt.WindowStaysOnTopHint)# 計算窗口大小self.window_height = int(270 * ratio)self.window_width = int(480 * ratio)# 設置窗口最小尺寸self.setMinimumSize(self.window_width, self.window_height * 2)# 連接按鈕點擊事件self.bt_jia.clicked.connect(self.clicked_jia)self.bt_jian.clicked.connect(self.clicked_jian)# 自定義UI設置def set_ui(self):pass  # 此處可添加更多UI設置# 按鈕“加”點擊事件處理def clicked_jia(self):# 如果窗口高度加上增量后超過屏幕高度,則返回if self.window_height + 108 * ratio > 1080 * ratio:return# 更新窗口大小self.window_height += int(108 * ratio)self.window_width += int(190 * ratio)# 設置標簽固定高度self.lb_xunlu.setFixedHeight(self.window_height)# 根據(jù)窗口寬度調(diào)整標簽位置if self.width() >= self.lb_yolov.width() + self.lb_xunlu.width():self.lb_yolov.move(self.lb_xunlu.width(), 0)else:self.lb_yolov.move(0, self.lb_xunlu.height())# 設置標簽固定大小self.lb_yolov.setFixedHeight(self.window_height)self.lb_yolov.setFixedWidth(self.window_width)# 按鈕“減”點擊事件處理def clicked_jian(self):# 如果窗口高度減去增量后小于最小高度,則返回if self.window_height - 108 * ratio < 270 * ratio:return# 更新窗口大小self.window_height -= int(108 * ratio)self.window_width -= int(190 * ratio)# 設置標簽固定高度self.lb_xunlu.setFixedHeight(self.window_height)# 根據(jù)窗口寬度調(diào)整標簽位置if self.width() >= self.lb_yolov.width() + self.lb_xunlu.width():self.lb_yolov.move(self.lb_xunlu.width(), 0)else:self.lb_yolov.move(0, self.lb_xunlu.height())# 設置標簽固定大小self.lb_yolov.setFixedHeight(self.window_height)self.lb_yolov.setFixedWidth(self.window_width)# 重寫關閉事件def closeEvent(self, event):# 關閉窗口時取消主窗口上的動作選中狀態(tài)self.parent.action_isShow.setChecked(False)# 重寫調(diào)整大小事件def resizeEvent(self, event):# 根據(jù)窗口寬度調(diào)整標簽位置if self.width() >= self.lb_yolov.width() + self.lb_xunlu.width():self.lb_yolov.move(self.lb_xunlu.width(), 0)else:self.lb_yolov.move(0, self.lb_xunlu.height())# 定義MainWindow類,繼承自QMainWindow和Ui_mainWindow
class MainWindow(QMainWindow, Ui_mainWindow):def __init__(self):super(MainWindow, self).__init__()  # 調(diào)用父類構(gòu)造函數(shù)self.setupUi(self)  # 設置UI布局self.retranslateUi(self)  # 重新翻譯UI組件的文字# 修改窗口樣式為黑灰色,高亮self.set_ui()# 設置窗口標題self.setWindowTitle(f"修改主頁標題")# 設置窗口尺寸self.resize(640, 900)# 設置窗口起始位置self.move(0, 300)# 創(chuàng)建網(wǎng)格布局self.g_box = QGridLayout()# 創(chuàng)建一個中間部件self.container_widget = QWidget()# 將網(wǎng)格布局設置給中間部件self.container_widget.setLayout(self.g_box)# 設置布局左上對齊self.g_box.setAlignment(Qt.AlignTop | Qt.AlignLeft)# 設置布局邊距self.g_box.setContentsMargins(0, 0, 0, 0)# 設置布局左對齊self.g_box.setAlignment(Qt.AlignTop)# 將中間部件設置為QScrollArea的子部件self.sa_main.setWidget(self.container_widget)# 獲取縱向滾動條控件vertical_scrollbar = self.findChild(QScrollArea)self.v_scrollbar = vertical_scrollbar.verticalScrollBar()# 設置窗口保持在最頂層self.setWindowFlags(Qt.WindowStaysOnTopHint)# 初始化變量self.row = 0self.column = -1self.run_times = 1self.column_step = 310# 獲取主窗口的狀態(tài)欄對象self.statusbar = self.statusBar()# 設置狀態(tài)欄文本self.statusbar.showMessage('歡迎使用')# 初始化數(shù)據(jù)列表self.datas = []# 創(chuàng)建一個計時器,用于延遲布局self.timer = QTimer(self)self.timer.setSingleShot(True)  # 設置為單次觸發(fā)self.timer.timeout.connect(self.update_layout)# 綁定信號槽self.connect_set()# 創(chuàng)建定時器  用于周期顯示圖片self.timer = QTimer(self)self.timer.timeout.connect(self.on_timer_timeout)self.timer.start(5000)  # 每5秒觸發(fā)一次def on_timer_timeout(self):# 每隔一段時間自動顯示圖片self.sg.mysig_show_xunlu.emit()self.sg.mysig_show_yolov.emit()# 綁定信號槽def connect_set(self):# 創(chuàng)建一個頂級菜單self.menu = self.menuBar()self.menu_view = self.menu.addMenu("視圖")# 創(chuàng)建一個動作self.action_isShow = QAction("顯示檢測結(jié)果窗口", self)self.action_isShow.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_F11))self.action_isShow.triggered.connect(self.hotkey_isShow)self.action_isShow.setCheckable(True)self.action_isShow.setChecked(True)self.menu_view.addAction(self.action_isShow)# 打開預測窗口self.hotkey_isShow()self.sg = MySignal()self.sg.mysig_show_xunlu.connect(self.show_xunlu)self.sg.mysig_show_yolov.connect(self.show_yolov)def show_xunlu(self, image_path="./datas/111.png"):# 加載本地圖片pixmap = QPixmap(image_path)# 設置圖片到 lb_xunlu 控件self.fromshow.lb_xunlu.setPixmap(pixmap)# 設置寬度固定,高度自適應self.fromshow.window_width = int(self.fromshow.window_height * pixmap.width() / pixmap.height())self.fromshow.lb_xunlu.setFixedHeight(self.fromshow.window_height)self.fromshow.lb_xunlu.setFixedWidth(self.fromshow.window_width)self.fromshow.lb_xunlu.setScaledContents(True)def show_yolov(self, image_path="./datas/111.png"):print(2222)# 加載本地圖片pixmap1 = QPixmap(image_path)# 設置圖片到 lb_yolov 控件self.fromshow.lb_yolov.setPixmap(pixmap1)# 根據(jù)窗口寬度調(diào)整 lb_yolov 的位置if self.fromshow.width() >= self.fromshow.lb_yolov.width() + self.fromshow.lb_xunlu.width():self.fromshow.lb_yolov.move(self.fromshow.lb_xunlu.width(), 0)else:self.fromshow.lb_yolov.move(0, self.fromshow.lb_xunlu.height())# 打開預測窗口def hotkey_isShow(self):# 嘗試創(chuàng)建懸浮窗口實例if not hasattr(self, "fromshow"):self.fromshow = FormShow(self)  # 創(chuàng)建懸浮窗口實例self.addDockWidget(Qt.TopDockWidgetArea, self.fromshow)  # 添加懸浮窗口到主窗口# 更新布局def update_layout(self):try:# 獲取主窗口的寬度width = self.centralWidget().width()# 計算每行可以容納的組件數(shù)量num_per_row = (width) // (self.column_step * ratio)if num_per_row < 1:num_per_row = 1# 清空當前布局for i in reversed(range(self.g_box.count())):self.g_box.itemAt(i).widget().setParent(None)# 重新添加組件到網(wǎng)格布局for i, data in enumerate(self.datas):self.row = int(i // num_per_row)self.column = int(i % num_per_row)self.g_box.addWidget(data["f_item"], self.row, self.column)except:pass# 設置主窗口樣式def set_ui(self):# 設置主題樣式為 Flatwhitefrom qt_material import apply_stylesheetapply_stylesheet(app, theme='dark_pink.xml')# 設置窗口樣式表self.setStyleSheet("""QScrollBar::handle:horizontal {background-color: #A50F2C;  /* 設置滑塊顏色 */}QScrollBar::handle:horizontal:hover {background-color: #FF1744;  /* 設置滑塊顏色 */}QPushButton:hover {background-color: #DFC472;  /* 設置顏色 */}QPlainTextEdit {padding: 0px;margin: 0px;}QPushButton {padding: 0px;margin: 1px;}""" + "font-family: {}; font-size: {}pt;".format(font.family(), font.pointSize()))# 主程序入口
if __name__ == '__main__':# 獲取屏幕寬度和高度screen_width = ctypes.windll.user32.GetSystemMetrics(0)screen_height = ctypes.windll.user32.GetSystemMetrics(1)# 初始化QT應用app = QApplication(sys.argv)# 計算分辨率比例ratio = screen_width / 2560# 設置全局字體大小base_font_size = 13new_font_size = int(base_font_size * ratio)font = QFont("Arial", new_font_size)# 創(chuàng)建主窗口實例window_main = MainWindow()# 顯示主窗口window_main.show()# 監(jiān)聽消息不關閉sys.exit(app.exec_())

http://www.risenshineclean.com/news/57232.html

相關文章:

  • java網(wǎng)站開發(fā)實例視頻教程朋友圈廣告代理商官網(wǎng)
  • 網(wǎng)站設置關于我們怎么做推廣策略怎么寫
  • WordPress首頁站內(nèi)搜索開魯seo網(wǎng)站
  • 常熟網(wǎng)站開發(fā)搜索大全引擎入口
  • 利用淘寶視頻服務做視頻網(wǎng)站百度快照如何優(yōu)化
  • 網(wǎng)站新建設請示cpa游戲推廣聯(lián)盟
  • 新增備案網(wǎng)站常見的網(wǎng)絡推廣方式包括
  • 西山區(qū)城市建設局網(wǎng)站哈市今日頭條最新
  • 建設企業(yè)網(wǎng)站登錄901百度廣告運營
  • 如何建設淘寶客網(wǎng)站專業(yè)網(wǎng)站推廣軟件
  • 免費的erp系統(tǒng)成都網(wǎng)站關鍵詞推廣優(yōu)化
  • 網(wǎng)站開發(fā)編碼選擇一般是網(wǎng)絡營銷大師排行榜
  • 福田時代汽車官方網(wǎng)站品牌傳播方案
  • 58重慶網(wǎng)站建設最新網(wǎng)站查詢
  • 網(wǎng)站建設制作汕頭寧波外貿(mào)網(wǎng)站推廣優(yōu)化
  • 建設銀行河南省分行網(wǎng)站愛站網(wǎng) 關鍵詞挖掘工具站長工具
  • 化工產(chǎn)品網(wǎng)站建設百度關鍵詞優(yōu)化公司哪家好
  • 營銷型網(wǎng)站建設百度網(wǎng)站的網(wǎng)址
  • 石家莊網(wǎng)站建設案例網(wǎng)絡推廣員怎么做
  • 姐妹直播河南網(wǎng)站建設優(yōu)化技術(shù)
  • 做采集網(wǎng)站賺錢嗎全網(wǎng)自媒體平臺大全
  • h5彩票網(wǎng)站怎么做百度權(quán)重排名查詢
  • 網(wǎng)站畢業(yè)設計圖怎么做培訓學校機構(gòu)
  • 做本地網(wǎng)站賺錢百度收錄的網(wǎng)站
  • 彩票做的最好是個網(wǎng)站好佛山seo培訓機構(gòu)
  • 開發(fā)什么網(wǎng)站好seo名詞解釋
  • 企業(yè)管理研究生學校排名seo引擎優(yōu)化怎么做
  • 一個人做網(wǎng)站原型網(wǎng)絡推廣團隊哪家好
  • 上海浦東新區(qū)建設和交通委員會網(wǎng)站網(wǎng)絡熱詞作文
  • 那個網(wǎng)站做境外自由行便宜電商營銷推廣方案