使用PyQt5實現添加工具欄、增加SwitchButton控件

前言:通過在網上找到的“電池電壓監控界面”,學習PyQt5中添加工具欄、增加SwitchButton控件,在滑塊控件右側增加文本顯示、設置界面背景顏色、修改文本控件字體顏色等。

1. 上位機界面效果展示

網絡上原圖如下:

在這里插入圖片描述

自己使用PyQt5做的界面效果如下:

在這里插入圖片描述

做出來的界面效果不如原來的界面好看,也嘗試設置窗口的背景圖片,但是選不到好看的背景圖片,做出來的效果還不如單純將界面背景設置成黑色的大氣。

2. 設置開關控件,左劃關閉右劃打開

參考文章:PyQt 定義控件SwitchButton 指南

搞定PyQt5 開關控件 SwitchButton 滑動開關一文就夠了使用這篇文章的SwitchButton 控件,實際界面在劃動SwitchButton時,速度太慢了,主要是點擊SwitchButton 控件事件不是鼠標往右邊拉動事件。

結合上述兩篇文章的代碼,主要以PyQt 定義控件SwitchButton 指南這篇文章代碼為主。

QSwitchButton空間效果如下,也是鼠標點擊事件,不是鼠標向左右劃動事件。

在這里插入圖片描述

修改的QSwitchButton空間代碼如下:

#!/usr/bin/env pythonimport sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout
from PyQt5.QtCore import pyqtSignal, Qt, QRect
from PyQt5.QtGui import QPainter, QFont, QBrush, QColor, QPenclass QSwitchButton(QWidget):clickedOn = pyqtSignal()clickedOff = pyqtSignal()def __init__(self, parent=None):super(QSwitchButton, self).__init__(parent)self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint)self.setAttribute(Qt.WA_TranslucentBackground)# self.resize(100, 30)# QSwitchButtonstate:True is ON,False is OFFself.state = Falseself.setFixedSize(80, 40)def mousePressEvent(self, event):"""set click event for state change"""super(QSwitchButton, self).mousePressEvent(event)if self.state:# 發射信號self.clickedOff.emit()else:# 發射信號self.clickedOn.emit()self.state = False if self.state else Trueself.update()def paintEvent(self, event):"""Set the button"""super(QSwitchButton, self).paintEvent(event)# Create a renderer and set anti-aliasing and smooth transitionspainter = QPainter(self)painter.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform)# Defining font stylesfont = QFont("Arial")font.setPixelSize(self.height() // 3)painter.setFont(font)# QSwitchButton state:ONif self.state:# Drawing backgroundpainter.setPen(Qt.NoPen)# brush = QBrush(QColor('#bd93f9'))brush = QBrush(QColor("green"))painter.setBrush(brush)# Top left corner of the rectangle coordinaterect_x = 0rect_y = 0rect_width = self.width()rect_height = self.height()rect_radius = self.height() // 2painter.drawRoundedRect(rect_x, rect_y, rect_width, rect_height, rect_radius, rect_radius)# Drawing slides circlepainter.setPen(Qt.NoPen)brush.setColor(QColor("#ffffff"))painter.setBrush(brush)# Phase difference pixel point# Top left corner of the rectangle coordinatediff_pix = 3rect_x = self.width() - diff_pix - (self.height() - 2 * diff_pix)rect_y = diff_pixrect_width = self.height() - 2 * diff_pixrect_height = self.height() - 2 * diff_pixrect_radius = (self.height() - 2 * diff_pix) // 2painter.drawRoundedRect(rect_x, rect_y, rect_width, rect_height, rect_radius, rect_radius)# ON txt setpainter.setPen(QPen(QColor("#ffffff")))painter.setBrush(Qt.NoBrush)painter.drawText(QRect(int(self.height() / 3), int(self.height() / 3.5), 50, 20),Qt.AlignLeft,"ON",)# QSwitchButton state:OFFelse:# Drawing backgroundpainter.setPen(Qt.NoPen)# brush = QBrush(QColor('#525555'))brush = QBrush(QColor("white"))painter.setBrush(brush)# Top left corner of the rectangle coordinaterect_x = 0rect_y = 0rect_width = self.width()rect_height = self.height()rect_radius = self.height() // 2painter.drawRoundedRect(rect_x, rect_y, rect_width, rect_height, rect_radius, rect_radius)# Drawing slides circlepen = QPen(QColor("#999999"))pen.setWidth(1)painter.setPen(pen)# Phase difference pixel pointdiff_pix = 3# Top left corner of the rectangle coordinaterect_x = diff_pixrect_y = diff_pixrect_width = self.height() - 2 * diff_pixrect_height = self.height() - 2 * diff_pixrect_radius = (self.height() - 2 * diff_pix) // 2painter.drawRoundedRect(rect_x, rect_y, rect_width, rect_height, rect_radius, rect_radius)# OFF txt setpainter.setBrush(Qt.NoBrush)painter.drawText(QRect(int(self.width() * 1 / 2), int(self.height() / 3.5), 50, 20),Qt.AlignLeft,"OFF",)def main():app = QApplication(sys.argv)window = QMainWindow()window.setGeometry(100, 100, 100, 290)window.setWindowTitle("Switch Button Example")switch1 = QSwitchButton()switch2 = QSwitchButton()layout = QVBoxLayout()layout.addWidget(switch1)layout.addWidget(switch2)window.setCentralWidget(QWidget())window.centralWidget().setLayout(layout)window.show()sys.exit(app.exec_())if __name__ == "__main__":main()

3. 設置工具欄為界面左側顯示

以下是添加工具欄到界面底部的代碼:

from PyQt5.QtCore import Qt# 創建一個工具欄
toolbar = QToolBar("Bottom Toolbar")
# 添加一個動作到工具欄
toolbar.addAction(QAction(QIcon('./icon/下載.png'), "下載", self))
# 將工具欄添加到主窗口
self.addToolBar(Qt.BottomToolBarArea, toolbar)

只要修改Qt.BottomToolBarArea為Qt.LeftToolBarArea就可以實現添加界面左側工具欄功能。

# 將工具欄添加到主窗口
self.addToolBar(Qt.LeftToolBarArea, toolbar)

4. toolbar工具欄設置圖標間隔大小

使用下面一行代碼,可以設置工具欄上每個圖標的間隔大小是一個固定值。

toolbar.setStyleSheet("QToolBar{spacing:8px;}")

要達到界面美觀的效果,必須考慮圖標之間的間隔要隨著窗口的縮放而變化,使用以下在圖標之間增加一個QWidget控件的方法可以實現工具欄圖標間距為自適應窗口大小。

  		# 創建一個垂直的工具欄self.leftToolBar = QToolBar()# self.leftToolBar.setStyleSheet("QToolBar{spacing:60px;}")# 將工具欄添加到主窗口self.addToolBar(Qt.LeftToolBarArea, self.leftToolBar)# 創建一個QAction,并設置其圖標和提示action = QAction(QIcon('./icon/主界面.png'), 'menu', self)action.setShortcut('Ctrl+Q')action.triggered.connect(self.close)self.leftToolBar.addAction(action)# 增加工具欄圖標間距為自適應窗口大小self.set_action_spacer(self.leftToolBar)action = QAction(QIcon('./icon/網關信息.png'), 'internet', self)action.setShortcut('Ctrl+Q')action.triggered.connect(self.close)self.leftToolBar.addAction(action)def set_action_spacer(self, ToolBar):# 插入一個透明的間隔動作(這里使用QWidget作為間隔)spacer = QWidget()size_policy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)spacer.setSizePolicy(size_policy)ToolBar.addWidget(spacer)

5. 滑塊QSlider右側設置文本框顯示滑塊數值

想達到的效果是:文本框緊挨著滑塊,開始的做法是設置文本框與滑塊在gridLayout布局的同一個格子里面,這樣就實現了文本框緊挨著滑塊并顯示在滑塊右側的視覺效果。

		# 創建一個標簽來顯示滑塊的值self.horizontalSlider.setFixedSize(200, 20)self.horizontalSlider_2.setFixedSize(200, 20)self.horizontalSlider.setEnabled(True)  # 確保滑塊是啟用的self.horizontalSlider_2.setEnabled(True)  # 確保滑塊是啟用的self.valueLabel = QLabel('10%', self)self.valueLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)  # 右對齊self.valueLabel.setFixedSize(240, 20)# 將滑塊和標簽添加到布局中self.gridLayout_4.addWidget(self.valueLabel, 1, 0, 1, 1)

但這樣做的后果是拉不動滑塊,找到原因可能是滑塊的布局受限導致影響滑塊的移動,取消文本框與滑塊在同一個格子之后,滑塊能夠正常拉動數值。

在這里插入圖片描述

使用Qt Designer在滑塊右側的格子中添加文本框,通過QgridLayout的layoutHorizontalSpacing屬性設置滑塊與文本框之間的間距,盡量在界面展示效果上達到文本框緊挨著滑塊顯示數值的功能。

在這里插入圖片描述

6. 設置窗口背景圖片

參考文章:Pyqt5設置窗口背景的3種方法

# 設置界面背景圖片
palette = QPalette()
palette.setBrush(QPalette.Background, QBrush(QPixmap("./img.png")))
self.setPalette(palette)

界面設置背景圖片后的展示效果如下:

在這里插入圖片描述

7. 點擊工具欄圖標實現截圖功能

參考文章:python PyQt5截圖

關鍵代碼:

		# 創建一個QAction,用于觸發截圖screenshot_action = QAction(QIcon('./icon/照相機.png'), 'Screenshot', self)screenshot_action.triggered.connect(self.take_screenshot)screenshot_action.setShortcut("Ctrl+S")self.leftToolBar.addAction(screenshot_action)def take_screenshot(self):# 獲取整個屏幕的圖像screen = QGuiApplication.primaryScreen()if screen is not None:screenshot = screen.grabWindow(0)screenshot.save('screenshot.png', 'png')# 彈出消息框顯示截圖QMessageBox.information(self, 'Screenshot', 'Screenshot taken.')

8. 如何去掉工具欄最上方的省略號

使用如下代碼添加工具欄到界面最左側:

		# 創建一個垂直的工具欄self.leftToolBar = QToolBar()# 將工具欄添加到主窗口self.addToolBar(Qt.LeftToolBarArea, self.leftToolBar)

運行界面會出現一種情況:工具欄最上方會有幾個省略號,這樣會影響美觀。

在這里插入圖片描述

考慮為什么會出現這種情況,當只是添加一個工具欄不添加QAction,工具欄最上方只有兩個點,隨著QAction的添加,工具欄上方的點數也增加,可能原因猜測是由于工具欄的空間不足導致的。考慮使用Qt Designer在界面最左側添加一個verticalLayout,將工具欄放置在verticalLayout上面,增加工具欄的空間。

在這里插入圖片描述

使用如下代碼實現將工具欄放置在verticalLayout上面,增加工具欄的空間。

		 # 創建一個垂直的工具欄self.leftToolBar = QToolBar()self.leftToolBar.setOrientation(Qt.Vertical)# 將工具欄添加到主窗口# self.addToolBar(Qt.LeftToolBarArea, self.leftToolBar)self.verticalLayout.addWidget(self.leftToolBar)

結論:將工具欄放置在verticalLayout上面,增加工具欄的空間,通過這種方式解決了工具欄最上方的省略號問題,但是另一個問題是隨著界面全屏顯示,工具欄位置不在界面最左側固定了,也會隨著窗口變大而變化,原因應該是verticalLayout寬度增加的問題。

在這里插入圖片描述

現在要解決的問題:如何使工具欄位置固定在界面最左側,不會隨著窗口變大而位置變化

解決辦法:使用Qt Designer設計界面布局時,增加如下所示的兩個horizontalSpacer,并且horizontalSpacer的sizeType設置為Expanding。這樣隨著窗口的放大,最左側的工具欄位置也不會變動,會一直靠左顯示。

在這里插入圖片描述

9. 設置工具欄上QAction控件的背景顏色

QAction控件是沒有樣式表可以設置其背景顏色的,只有通過設置QToolBar工具欄的樣式表背景顏色來達到設置工具欄上QAction控件的背景顏色目的。

設置工具欄上QToolBar的背景顏色為淡藍色,關鍵代碼:

 self.leftToolBar.setStyleSheet(f"QToolBar {{background-color: {QColor('lightBlue').name()}}};")

完整代碼:

        # 創建一個垂直的工具欄self.leftToolBar = QToolBar()self.leftToolBar.setOrientation(Qt.Vertical)# self.leftToolBar.setStyleSheet("QToolBar{spacing:60px;}")# 將工具欄添加到主窗口# self.addToolBar(Qt.LeftToolBarArea, self.leftToolBar)self.verticalLayout.addWidget(self.leftToolBar)action = QAction(QIcon("./icon/電池.png"), "BatteryInfo", self)# action.setShortcut("Ctrl+Q")# action.triggered.connect(self.close)self.leftToolBar.addAction(action)self.leftToolBar.setStyleSheet(f"QToolBar {{background-color: {QColor('lightBlue').name()}}};")# 增加工具欄圖標間距為自適應窗口大小self.set_action_spacer(self.verticalLayout)

10. 完整界面程序代碼

main.py代碼如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : Logintern09import sys
from PyQt5.QtWidgets import (QApplication,QMainWindow,QWidget,QLabel,QAction,QToolBar,QSizePolicy,QMessageBox,
)
from PyQt5.QtGui import QIcon, QPalette, QColor, QFont, QGuiApplication
from PyQt5.QtCore import Qt
from battery_v import Ui_MainWindow
from QSwitchButton import QSwitchButtonclass mainWindow(QMainWindow, Ui_MainWindow):def __init__(self):super(mainWindow, self).__init__()self.setupUi(self)  # 初始化窗口# 設置界面的背景顏色self.set_background_color()# 設置界面背景圖片# palette = QPalette()# palette.setBrush(QPalette.Background, QBrush(QPixmap("./img.png")))# self.setPalette(palette)# 設置窗口圖標self.setWindowIcon(QIcon("./icon/電量未知.png"))progressBar_list = [self.progressBar_3,self.progressBar_4,self.progressBar_5,self.progressBar_6,]for progressBar in progressBar_list:progressBar.setFixedSize(60, 150)# 創建QSwitchButton控件并放入容器self.switchButton = QSwitchButton()self.gridLayout_8.addWidget(self.switchButton, 0, 1, 1, 1)self.switchButton.clickedOn.connect(self.on_voltage_view)self.switchButton.clickedOff.connect(self.off_voltage_view)# 創建一個標簽來顯示滑塊的值self.horizontalSlider.setFixedSize(200, 20)self.horizontalSlider_2.setFixedSize(200, 20)self.horizontalSlider.setEnabled(True)  # 確保滑塊是啟用的self.horizontalSlider_2.setEnabled(True)  # 確保滑塊是啟用的# 連接滑塊的值改變信號到槽函數self.horizontalSlider.valueChanged.connect((lambda: self.on_slider_value_changed(self.label_26, self.horizontalSlider.value())))# # 連接滑塊的值改變信號到槽函數self.horizontalSlider_2.valueChanged.connect((lambda: self.on_slider_value_changed(self.label_27, self.horizontalSlider_2.value())))# 找到所有的QLabel控件label_obj = self.findChildren(QLabel)for label in label_obj:label.setStyleSheet("color: white;")  # 設置字體顏色為白色# 設置QLabel的字體大小font = QFont()font.setPointSize(14)  # 設置字體大小為14點label.setFont(font)self.label_7.setStyleSheet("color: green;")  # 設置字體顏色為綠色self.label_25.setFixedSize(100, 40)# 設置按鈕的樣式self.pushButton.setFixedSize(200, 40)font = QFont()font.setPointSize(14)  # 設置字體大小為14點font.setBold(True)self.pushButton.setFont(font)# 創建一個垂直的工具欄self.leftToolBar = QToolBar()self.leftToolBar.setOrientation(Qt.Vertical)# self.leftToolBar.setStyleSheet("QToolBar{spacing:60px;}")# 將工具欄添加到主窗口# self.addToolBar(Qt.LeftToolBarArea, self.leftToolBar)self.verticalLayout.addWidget(self.leftToolBar)# 創建一個QAction,并設置其圖標和提示action = QAction(QIcon("./icon/主界面.png"), "Menu", self)# action.setShortcut("Ctrl+Q")# action.triggered.connect(self.close)self.leftToolBar.addAction(action)# 增加工具欄圖標間距為自適應窗口大小self.set_action_spacer(self.verticalLayout)# 創建一個垂直的工具欄self.leftToolBar = QToolBar()self.leftToolBar.setOrientation(Qt.Vertical)# self.leftToolBar.setStyleSheet("QToolBar{spacing:60px;}")# 將工具欄添加到主窗口# self.addToolBar(Qt.LeftToolBarArea, self.leftToolBar)self.verticalLayout.addWidget(self.leftToolBar)action = QAction(QIcon("./icon/網關信息.png"), "Internet", self)# action.setShortcut("Ctrl+Q")# action.triggered.connect(self.close)self.leftToolBar.addAction(action)# 增加工具欄圖標間距為自適應窗口大小self.set_action_spacer(self.verticalLayout)# 創建一個垂直的工具欄self.leftToolBar = QToolBar()self.leftToolBar.setOrientation(Qt.Vertical)# self.leftToolBar.setStyleSheet("QToolBar{spacing:60px;}")# 將工具欄添加到主窗口# self.addToolBar(Qt.LeftToolBarArea, self.leftToolBar)self.verticalLayout.addWidget(self.leftToolBar)action = QAction(QIcon("./icon/HD連接.png"), "HDConnect", self)# action.setShortcut("Ctrl+Q")# action.triggered.connect(self.close)self.leftToolBar.addAction(action)# 增加工具欄圖標間距為自適應窗口大小self.set_action_spacer(self.verticalLayout)# 創建一個垂直的工具欄self.leftToolBar = QToolBar()self.leftToolBar.setOrientation(Qt.Vertical)# self.leftToolBar.setStyleSheet("QToolBar{spacing:60px;}")# 將工具欄添加到主窗口# self.addToolBar(Qt.LeftToolBarArea, self.leftToolBar)self.verticalLayout.addWidget(self.leftToolBar)action = QAction(QIcon("./icon/電池.png"), "BatteryInfo", self)# action.setShortcut("Ctrl+Q")# action.triggered.connect(self.close)self.leftToolBar.addAction(action)self.leftToolBar.setStyleSheet(f"QToolBar {{background-color: {QColor('lightBlue').name()}}};")# 增加工具欄圖標間距為自適應窗口大小self.set_action_spacer(self.verticalLayout)# 創建一個垂直的工具欄self.leftToolBar = QToolBar()self.leftToolBar.setOrientation(Qt.Vertical)# self.leftToolBar.setStyleSheet("QToolBar{spacing:60px;}")# 將工具欄添加到主窗口# self.addToolBar(Qt.LeftToolBarArea, self.leftToolBar)self.verticalLayout.addWidget(self.leftToolBar)# 創建一個QAction,用于觸發截圖screenshot_action = QAction(QIcon("./icon/照相機.png"), "Screenshot", self)screenshot_action.triggered.connect(self.take_screenshot)screenshot_action.setShortcut("Ctrl+S")self.leftToolBar.addAction(screenshot_action)# 增加工具欄圖標間距為自適應窗口大小self.set_action_spacer(self.verticalLayout)# 創建一個垂直的工具欄self.leftToolBar = QToolBar()self.leftToolBar.setOrientation(Qt.Vertical)# self.leftToolBar.setStyleSheet("QToolBar{spacing:60px;}")# 將工具欄添加到主窗口# self.addToolBar(Qt.LeftToolBarArea, self.leftToolBar)self.verticalLayout.addWidget(self.leftToolBar)action = QAction(QIcon("./icon/四點連接.png"), "Close", self)action.setShortcut("Ctrl+Q")action.triggered.connect(self.close)self.leftToolBar.addAction(action)def set_background_color(self):# 創建調色板palette = QPalette()# 設置背景顏色為亮黑色palette.setColor(QPalette.Background, QColor(30, 30, 30))  # 亮黑色# 應用調色板self.setPalette(palette)def on_slider_value_changed(self, valueLabel, value):# 當滑塊的值改變時,更新標簽顯示的數值valueLabel.setText(str(value) + "%")def on_voltage_view(self):progressBar_list = [self.progressBar_3,self.progressBar_4,self.progressBar_5,self.progressBar_6,]text_label = [self.label_14, self.label_15, self.label_16, self.label_17]label_data = ["3.79V", "3.80V", "3.80V", "3.80V"]for progressBar in progressBar_list:progressBar.setValue(60)for i, label in enumerate(text_label):label.setText(label_data[i])def off_voltage_view(self):progressBar_list = [self.progressBar_3,self.progressBar_4,self.progressBar_5,self.progressBar_6,]text_label = [self.label_14, self.label_15, self.label_16, self.label_17]for progressBar in progressBar_list:progressBar.setValue(0)for i, label in enumerate(text_label):label.setText("0V")def set_action_spacer(self, layout):# 插入一個透明的間隔動作(這里使用QWidget作為間隔)spacer = QWidget()size_policy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding)spacer.setSizePolicy(size_policy)layout.addWidget(spacer)def take_screenshot(self):# 獲取整個屏幕的圖像screen = QGuiApplication.primaryScreen()if screen is not None:screenshot = screen.grabWindow(0)screenshot.save("screenshot.png", "png")# 彈出消息框顯示截圖QMessageBox.information(self, "Screenshot", "Screenshot taken.")if __name__ == "__main__":app = QApplication(sys.argv)ui = mainWindow()ui.show()sys.exit(app.exec_())

Qt Designer工具設計基礎界面布局,生成的.ui轉成python的.py代碼如下:

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'battery_v.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# 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(982, 740)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)self.gridLayout.setObjectName("gridLayout")self.horizontalLayout = QtWidgets.QHBoxLayout()self.horizontalLayout.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint)self.horizontalLayout.setObjectName("horizontalLayout")self.label = QtWidgets.QLabel(self.centralwidget)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())self.label.setSizePolicy(sizePolicy)font = QtGui.QFont()font.setBold(True)font.setWeight(75)self.label.setFont(font)self.label.setAlignment(QtCore.Qt.AlignCenter)self.label.setObjectName("label")self.horizontalLayout.addWidget(self.label)self.gridLayout.addLayout(self.horizontalLayout, 0, 2, 1, 1)self.frame_4 = QtWidgets.QFrame(self.centralwidget)self.frame_4.setFrameShape(QtWidgets.QFrame.Box)self.frame_4.setFrameShadow(QtWidgets.QFrame.Sunken)self.frame_4.setLineWidth(2)self.frame_4.setObjectName("frame_4")self.gridLayout_10 = QtWidgets.QGridLayout(self.frame_4)self.gridLayout_10.setObjectName("gridLayout_10")self.gridLayout_4 = QtWidgets.QGridLayout()self.gridLayout_4.setContentsMargins(-1, 50, -1, 0)self.gridLayout_4.setSpacing(20)self.gridLayout_4.setObjectName("gridLayout_4")self.label_26 = QtWidgets.QLabel(self.frame_4)font = QtGui.QFont()font.setBold(True)font.setWeight(75)self.label_26.setFont(font)self.label_26.setObjectName("label_26")self.gridLayout_4.addWidget(self.label_26, 1, 1, 1, 1)self.label_5 = QtWidgets.QLabel(self.frame_4)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.label_5.sizePolicy().hasHeightForWidth())self.label_5.setSizePolicy(sizePolicy)font = QtGui.QFont()font.setBold(True)font.setWeight(75)self.label_5.setFont(font)self.label_5.setAlignment(QtCore.Qt.AlignCenter)self.label_5.setObjectName("label_5")self.gridLayout_4.addWidget(self.label_5, 1, 4, 1, 1)self.horizontalSlider = QtWidgets.QSlider(self.frame_4)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.horizontalSlider.sizePolicy().hasHeightForWidth())self.horizontalSlider.setSizePolicy(sizePolicy)self.horizontalSlider.setMaximum(100)self.horizontalSlider.setProperty("value", 10)self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)self.horizontalSlider.setObjectName("horizontalSlider")self.gridLayout_4.addWidget(self.horizontalSlider, 1, 0, 1, 1)self.horizontalSlider_2 = QtWidgets.QSlider(self.frame_4)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.horizontalSlider_2.sizePolicy().hasHeightForWidth())self.horizontalSlider_2.setSizePolicy(sizePolicy)self.horizontalSlider_2.setAutoFillBackground(False)self.horizontalSlider_2.setMaximum(100)self.horizontalSlider_2.setProperty("value", 30)self.horizontalSlider_2.setOrientation(QtCore.Qt.Horizontal)self.horizontalSlider_2.setObjectName("horizontalSlider_2")self.gridLayout_4.addWidget(self.horizontalSlider_2, 1, 2, 1, 1)self.label_2 = QtWidgets.QLabel(self.frame_4)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth())self.label_2.setSizePolicy(sizePolicy)self.label_2.setObjectName("label_2")self.gridLayout_4.addWidget(self.label_2, 0, 2, 1, 1)self.label_3 = QtWidgets.QLabel(self.frame_4)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.label_3.sizePolicy().hasHeightForWidth())self.label_3.setSizePolicy(sizePolicy)self.label_3.setObjectName("label_3")self.gridLayout_4.addWidget(self.label_3, 0, 0, 1, 1)self.label_4 = QtWidgets.QLabel(self.frame_4)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.label_4.sizePolicy().hasHeightForWidth())self.label_4.setSizePolicy(sizePolicy)self.label_4.setLayoutDirection(QtCore.Qt.LeftToRight)self.label_4.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)self.label_4.setObjectName("label_4")self.gridLayout_4.addWidget(self.label_4, 0, 4, 1, 1)self.label_27 = QtWidgets.QLabel(self.frame_4)font = QtGui.QFont()font.setBold(True)font.setWeight(75)self.label_27.setFont(font)self.label_27.setObjectName("label_27")self.gridLayout_4.addWidget(self.label_27, 1, 3, 1, 1)self.gridLayout_10.addLayout(self.gridLayout_4, 0, 0, 1, 1)self.gridLayout.addWidget(self.frame_4, 1, 2, 1, 1)self.frame_3 = QtWidgets.QFrame(self.centralwidget)self.frame_3.setFrameShape(QtWidgets.QFrame.Box)self.frame_3.setFrameShadow(QtWidgets.QFrame.Sunken)self.frame_3.setLineWidth(2)self.frame_3.setObjectName("frame_3")self.gridLayout_2 = QtWidgets.QGridLayout(self.frame_3)self.gridLayout_2.setObjectName("gridLayout_2")self.gridLayout_9 = QtWidgets.QGridLayout()self.gridLayout_9.setContentsMargins(-1, -1, -1, 0)self.gridLayout_9.setHorizontalSpacing(20)self.gridLayout_9.setVerticalSpacing(0)self.gridLayout_9.setObjectName("gridLayout_9")self.label_24 = QtWidgets.QLabel(self.frame_3)self.label_24.setFrameShadow(QtWidgets.QFrame.Sunken)self.label_24.setText("")self.label_24.setAlignment(QtCore.Qt.AlignCenter)self.label_24.setObjectName("label_24")self.gridLayout_9.addWidget(self.label_24, 0, 2, 1, 1)self.pushButton = QtWidgets.QPushButton(self.frame_3)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.pushButton.sizePolicy().hasHeightForWidth())self.pushButton.setSizePolicy(sizePolicy)font = QtGui.QFont()font.setBold(True)font.setWeight(75)self.pushButton.setFont(font)self.pushButton.setObjectName("pushButton")self.gridLayout_9.addWidget(self.pushButton, 0, 3, 1, 1)self.label_23 = QtWidgets.QLabel(self.frame_3)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.label_23.sizePolicy().hasHeightForWidth())self.label_23.setSizePolicy(sizePolicy)self.label_23.setAlignment(QtCore.Qt.AlignCenter)self.label_23.setObjectName("label_23")self.gridLayout_9.addWidget(self.label_23, 0, 0, 1, 1)self.label_25 = QtWidgets.QLabel(self.frame_3)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.label_25.sizePolicy().hasHeightForWidth())self.label_25.setSizePolicy(sizePolicy)font = QtGui.QFont()font.setBold(True)font.setWeight(75)self.label_25.setFont(font)self.label_25.setFrameShape(QtWidgets.QFrame.StyledPanel)self.label_25.setFrameShadow(QtWidgets.QFrame.Sunken)self.label_25.setLineWidth(100)self.label_25.setMidLineWidth(20)self.label_25.setAlignment(QtCore.Qt.AlignCenter)self.label_25.setObjectName("label_25")self.gridLayout_9.addWidget(self.label_25, 0, 1, 1, 1)self.gridLayout_2.addLayout(self.gridLayout_9, 0, 0, 1, 1)self.gridLayout.addWidget(self.frame_3, 4, 2, 1, 1)spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)self.gridLayout.addItem(spacerItem, 0, 1, 1, 1)self.verticalLayout = QtWidgets.QVBoxLayout()self.verticalLayout.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint)self.verticalLayout.setSpacing(1)self.verticalLayout.setObjectName("verticalLayout")self.label_28 = QtWidgets.QLabel(self.centralwidget)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.label_28.sizePolicy().hasHeightForWidth())self.label_28.setSizePolicy(sizePolicy)self.label_28.setText("")self.label_28.setObjectName("label_28")self.verticalLayout.addWidget(self.label_28)self.gridLayout.addLayout(self.verticalLayout, 0, 0, 5, 1)self.frame_2 = QtWidgets.QFrame(self.centralwidget)self.frame_2.setFrameShape(QtWidgets.QFrame.Box)self.frame_2.setFrameShadow(QtWidgets.QFrame.Sunken)self.frame_2.setLineWidth(2)self.frame_2.setObjectName("frame_2")self.gridLayout_12 = QtWidgets.QGridLayout(self.frame_2)self.gridLayout_12.setObjectName("gridLayout_12")self.gridLayout_6 = QtWidgets.QGridLayout()self.gridLayout_6.setHorizontalSpacing(80)self.gridLayout_6.setVerticalSpacing(7)self.gridLayout_6.setObjectName("gridLayout_6")self.progressBar_5 = QtWidgets.QProgressBar(self.frame_2)self.progressBar_5.setProperty("value", 0)self.progressBar_5.setOrientation(QtCore.Qt.Vertical)self.progressBar_5.setObjectName("progressBar_5")self.gridLayout_6.addWidget(self.progressBar_5, 0, 2, 1, 1)self.progressBar_4 = QtWidgets.QProgressBar(self.frame_2)self.progressBar_4.setProperty("value", 0)self.progressBar_4.setOrientation(QtCore.Qt.Vertical)self.progressBar_4.setObjectName("progressBar_4")self.gridLayout_6.addWidget(self.progressBar_4, 0, 1, 1, 1)self.label_16 = QtWidgets.QLabel(self.frame_2)self.label_16.setAlignment(QtCore.Qt.AlignCenter)self.label_16.setObjectName("label_16")self.gridLayout_6.addWidget(self.label_16, 1, 2, 1, 1)self.label_14 = QtWidgets.QLabel(self.frame_2)self.label_14.setAlignment(QtCore.Qt.AlignCenter)self.label_14.setObjectName("label_14")self.gridLayout_6.addWidget(self.label_14, 1, 0, 1, 1)self.progressBar_3 = QtWidgets.QProgressBar(self.frame_2)self.progressBar_3.setProperty("value", 0)self.progressBar_3.setOrientation(QtCore.Qt.Vertical)self.progressBar_3.setObjectName("progressBar_3")self.gridLayout_6.addWidget(self.progressBar_3, 0, 0, 1, 1)self.label_15 = QtWidgets.QLabel(self.frame_2)self.label_15.setAlignment(QtCore.Qt.AlignCenter)self.label_15.setObjectName("label_15")self.gridLayout_6.addWidget(self.label_15, 1, 1, 1, 1)self.progressBar_6 = QtWidgets.QProgressBar(self.frame_2)self.progressBar_6.setProperty("value", 0)self.progressBar_6.setOrientation(QtCore.Qt.Vertical)self.progressBar_6.setObjectName("progressBar_6")self.gridLayout_6.addWidget(self.progressBar_6, 0, 3, 1, 1)self.label_17 = QtWidgets.QLabel(self.frame_2)self.label_17.setAlignment(QtCore.Qt.AlignCenter)self.label_17.setObjectName("label_17")self.gridLayout_6.addWidget(self.label_17, 1, 3, 1, 1)self.gridLayout_12.addLayout(self.gridLayout_6, 0, 0, 2, 1)self.gridLayout_8 = QtWidgets.QGridLayout()self.gridLayout_8.setObjectName("gridLayout_8")self.label_22 = QtWidgets.QLabel(self.frame_2)self.label_22.setObjectName("label_22")self.gridLayout_8.addWidget(self.label_22, 0, 0, 1, 1)self.gridLayout_12.addLayout(self.gridLayout_8, 1, 2, 1, 1)self.gridLayout_7 = QtWidgets.QGridLayout()self.gridLayout_7.setHorizontalSpacing(100)self.gridLayout_7.setVerticalSpacing(0)self.gridLayout_7.setObjectName("gridLayout_7")self.label_18 = QtWidgets.QLabel(self.frame_2)self.label_18.setObjectName("label_18")self.gridLayout_7.addWidget(self.label_18, 0, 0, 1, 1)self.label_19 = QtWidgets.QLabel(self.frame_2)font = QtGui.QFont()font.setBold(True)font.setWeight(75)self.label_19.setFont(font)self.label_19.setObjectName("label_19")self.gridLayout_7.addWidget(self.label_19, 1, 0, 1, 1)self.label_20 = QtWidgets.QLabel(self.frame_2)self.label_20.setObjectName("label_20")self.gridLayout_7.addWidget(self.label_20, 0, 1, 1, 1)self.label_21 = QtWidgets.QLabel(self.frame_2)font = QtGui.QFont()font.setBold(True)font.setWeight(75)self.label_21.setFont(font)self.label_21.setObjectName("label_21")self.gridLayout_7.addWidget(self.label_21, 1, 1, 1, 1)self.gridLayout_12.addLayout(self.gridLayout_7, 0, 2, 1, 1)spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)self.gridLayout_12.addItem(spacerItem1, 0, 1, 1, 1)self.gridLayout.addWidget(self.frame_2, 3, 2, 1, 1)self.frame = QtWidgets.QFrame(self.centralwidget)self.frame.setFrameShape(QtWidgets.QFrame.Box)self.frame.setFrameShadow(QtWidgets.QFrame.Sunken)self.frame.setLineWidth(2)self.frame.setObjectName("frame")self.gridLayout_3 = QtWidgets.QGridLayout(self.frame)self.gridLayout_3.setObjectName("gridLayout_3")self.gridLayout_5 = QtWidgets.QGridLayout()self.gridLayout_5.setHorizontalSpacing(180)self.gridLayout_5.setVerticalSpacing(20)self.gridLayout_5.setObjectName("gridLayout_5")self.label_11 = QtWidgets.QLabel(self.frame)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.label_11.sizePolicy().hasHeightForWidth())self.label_11.setSizePolicy(sizePolicy)font = QtGui.QFont()font.setBold(True)font.setWeight(75)self.label_11.setFont(font)self.label_11.setObjectName("label_11")self.gridLayout_5.addWidget(self.label_11, 1, 2, 1, 1)self.label_7 = QtWidgets.QLabel(self.frame)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.label_7.sizePolicy().hasHeightForWidth())self.label_7.setSizePolicy(sizePolicy)font = QtGui.QFont()font.setBold(True)font.setWeight(75)self.label_7.setFont(font)self.label_7.setObjectName("label_7")self.gridLayout_5.addWidget(self.label_7, 1, 0, 1, 1)self.label_9 = QtWidgets.QLabel(self.frame)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.label_9.sizePolicy().hasHeightForWidth())self.label_9.setSizePolicy(sizePolicy)font = QtGui.QFont()font.setBold(True)font.setWeight(75)self.label_9.setFont(font)self.label_9.setObjectName("label_9")self.gridLayout_5.addWidget(self.label_9, 1, 1, 1, 1)self.label_8 = QtWidgets.QLabel(self.frame)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.label_8.sizePolicy().hasHeightForWidth())self.label_8.setSizePolicy(sizePolicy)self.label_8.setObjectName("label_8")self.gridLayout_5.addWidget(self.label_8, 0, 1, 1, 1)self.label_10 = QtWidgets.QLabel(self.frame)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.label_10.sizePolicy().hasHeightForWidth())self.label_10.setSizePolicy(sizePolicy)self.label_10.setObjectName("label_10")self.gridLayout_5.addWidget(self.label_10, 0, 2, 1, 1)self.label_6 = QtWidgets.QLabel(self.frame)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.label_6.sizePolicy().hasHeightForWidth())self.label_6.setSizePolicy(sizePolicy)self.label_6.setObjectName("label_6")self.gridLayout_5.addWidget(self.label_6, 0, 0, 1, 1)self.label_12 = QtWidgets.QLabel(self.frame)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.label_12.sizePolicy().hasHeightForWidth())self.label_12.setSizePolicy(sizePolicy)self.label_12.setObjectName("label_12")self.gridLayout_5.addWidget(self.label_12, 0, 3, 1, 1)self.label_13 = QtWidgets.QLabel(self.frame)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.label_13.sizePolicy().hasHeightForWidth())self.label_13.setSizePolicy(sizePolicy)font = QtGui.QFont()font.setBold(True)font.setWeight(75)self.label_13.setFont(font)self.label_13.setObjectName("label_13")self.gridLayout_5.addWidget(self.label_13, 1, 3, 1, 1)self.gridLayout_3.addLayout(self.gridLayout_5, 0, 0, 1, 1)self.gridLayout.addWidget(self.frame, 2, 2, 1, 1)spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)self.gridLayout.addItem(spacerItem2, 1, 3, 1, 1)MainWindow.setCentralWidget(self.centralwidget)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "智能電池信息"))self.label.setText(_translate("MainWindow", "智能電池信息"))self.label_26.setText(_translate("MainWindow", "10%"))self.label_5.setText(_translate("MainWindow", "00:52"))self.label_2.setText(_translate("MainWindow", "低電量報警"))self.label_3.setText(_translate("MainWindow", "嚴重低電量報警"))self.label_4.setText(_translate("MainWindow", "飛行時間"))self.label_27.setText(_translate("MainWindow", "30%"))self.pushButton.setText(_translate("MainWindow", "電池歷史記錄信息"))self.label_23.setText(_translate("MainWindow", "開始自放電時間"))self.label_25.setText(_translate("MainWindow", "10天"))self.label_16.setText(_translate("MainWindow", "0V"))self.label_14.setText(_translate("MainWindow", "0V"))self.label_15.setText(_translate("MainWindow", "0V"))self.label_17.setText(_translate("MainWindow", "0V"))self.label_22.setText(_translate("MainWindow", "主屏顯示電壓"))self.label_18.setText(_translate("MainWindow", "電池壽命"))self.label_19.setText(_translate("MainWindow", "100%"))self.label_20.setText(_translate("MainWindow", "循環次數"))self.label_21.setText(_translate("MainWindow", "3"))self.label_11.setText(_translate("MainWindow", "4471 mAH"))self.label_7.setText(_translate("MainWindow", "15.18 V"))self.label_9.setText(_translate("MainWindow", "1922 mAH"))self.label_8.setText(_translate("MainWindow", "當前電量"))self.label_10.setText(_translate("MainWindow", "電池容量"))self.label_6.setText(_translate("MainWindow", "電壓"))self.label_12.setText(_translate("MainWindow", "溫度"))self.label_13.setText(_translate("MainWindow", "40 ℃"))

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44804.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44804.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44804.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springboot異常(一):springboot自定義全局異常處理

🌷1. 自定義一個異常類 自定義一個異常,有兩個變量異常代碼、異常消息,定義了兩個構造方法,一個無參構造方法,一個所有參數構造方法。 在構造方法中要掉用父類的構造方法,主要目的是在日志或控制臺打印異…

【Linux】多線程_3

文章目錄 九、多線程3. C11中的多線程4. 線程的簡單封裝 未完待續 九、多線程 3. C11中的多線程 Linux中是根據多線程庫來實現多線程的,C11也有自己的多線程,那它的多線程又是怎樣的?我們來使用一些C11的多線程。 Makefile: te…

Linux - 探索命令行

探索命令行 Linux命令行中的命令使用格式都是相同的: 命令名稱 參數1 參數2 參數3 ...參數之間用任意數量的空白字符分開. 關于命令行, 可以先閱讀一些基本常識. 然后我們介紹最常用的一些命令: ls用于列出當前目錄(即"文件夾")下的所有文件(或目錄). 目錄會用藍色…

面試經典題型:調用HashMap的put方法的具體執行流程

在調用put方法時時,有幾個關鍵點需要考慮: 哈希沖突的發生與解決: 哈希沖突指不同的鍵通過哈希函數計算得到相同的哈希值,導致它們應該存放在哈希表的同一個位置。解決沖突的常用方法包括開放尋址法和鏈表法(或其升級形…

CSIP-FTE考試專業題

靶場下載鏈接: https://pan.baidu.com/s/1ce1Kk0hSYlxrUoRTnNsiKA?pwdha1x pte-2003密碼:admin123 centos:root admin123 解壓密碼: PTE考試專用 下載好后直接用vmware打開,有兩個靶機,一個是基礎題&#x…

【CTF-Crypto】數論基礎-02

【CTF-Crypto】數論基礎-02 文章目錄 【CTF-Crypto】數論基礎-021-16 二次剩余1-20 模p下-1的平方根*1-21 Legendre符號*1-22 Jacobi符號*2-1 群*2-2 群的性質2-3 阿貝爾群*2-4 子群2-11 群同態2-18 原根2-21 什么是環2-23 什么是域2-25 子環2-26 理想2-32 多項式環 1-16 二次剩…

打造智慧校園德育管理,提升學生操行基礎分

智慧校園的德育管理系統內嵌的操行基礎分功能,是對學生日常行為規范和道德素養進行量化評估的一個創新實踐。該功能通過將抽象的道德品質轉化為具體可量化的指標,如遵守紀律、尊師重道、團結協作、愛護環境及參與集體活動的積極性等,為每個學…

醫療器械FDA |FDA網絡安全測試具體內容

醫療器械FDA網絡安全測試的具體內容涵蓋了多個方面,以確保醫療器械在網絡環境中的安全性和合規性。以下是根據權威來源歸納的FDA網絡安全測試的具體內容: 一、技術文件審查 網絡安全計劃:制造商需要提交網絡安全計劃,詳細描述產…

Matlab【光伏預測】基于雪融優化算法SAO優化高斯過程回歸GPR實現光伏多輸入單輸出預測附代碼

% 光伏預測 - 基于SAO優化的GPR % 數據準備 % 假設有多個輸入特征 X1, X2, …, Xn 和一個目標變量 Y % 假設數據已經存儲在 X 和 Y 中,每個變量為矩陣,每行表示一個樣本,每列表示一個特征 % 參數設置 numFeatures size(X, 2); % 輸入特征的…

Spring Boot集成easyposter快速入門Demo

1.什么是easyposter? easyposter是一個簡單的,便于擴展的繪制海報工具包 使用場景 在日常工作過程中,通常一些C端平臺會伴隨著海報生成與分享業務。因為隨著移動互聯網的迅猛發展,社交分享已成為我們日常生活的重要組成部分。海報分享作為…

visual studio 2019版下載以及與UE4虛幻引擎配置(過程記錄)(官網無法下載visual studio 2019安裝包)

一、概述 由于需要使用到UE4虛幻引擎,我使用的版本是4.27版本的,其官方默認的visual studio版本是2019版本的,相應的版本對應關系可以通過下面的官方網站對應關系查詢。https://docs.unrealengine.com/4.27/zh-CN/ProductionPipelines/Develo…

MMSegmentation筆記

如何訓練自制數據集? 首先需要在 mmsegmentation/mmseg/datasets 目錄下創建一個自制數據集的配置文件,以我的蘋果葉片病害分割數據集為例,創建了mmsegmentation/mmseg/datasets/appleleafseg.py 可以看到,這個配置文件主要定義…

python:使用matplotlib庫繪制圖像(四)

作者是跟著http://t.csdnimg.cn/4fVW0學習的,matplotlib系列文章是http://t.csdnimg.cn/4fVW0的自己學習過程中整理的詳細說明版本,對小白更友好哦! 四、條形圖 1. 一個數據樣本的條形圖 條形圖:常用于比較不同類別的數量或值&…

3dmax-vray5大常用材質設置方法

3dmax云渲染平臺——渲染100 以高性價比著稱,是預算有限的小伙伴首選。 15分鐘0.2,60分鐘內0.8;注冊填邀請碼【7788】可領30元禮包和免費渲染券 提供了多種機器配置選擇(可以自行匹配環境)最高256G大內存機器,滿足不同用戶需求。 木紋材質 肌理調整&…

函數語意學(The Sematics of Function)

1、非靜態成員函數轉化為非成員函數 c 設計準則之一就是:非靜態成員函數至少和非成員函數有相同的效率。 也就是說下面兩個函數具有相同的效率: float magnitude(const Point3d * this){...}; float Point3d::magnitude(){...};以 float Point3d::mag…

練習9.5 彩票分析

練習 9.14:彩票 創建?個列表或元素,其中包含 10 個數和 5 個字 ?。從這個列表或元組中隨機選擇 4 個數或字?,并打印?條消息, 指出只要彩票上是這 4 個數或字?,就中?獎了。 練習 9.15:彩票分析 可以使…

面試題 05. 替換空格

05. 替換空格 題目描述示例 題解 題目描述 請實現一個函數,把字符串 s 中的每個空格替換成"%20"。 示例 示例1 輸入:s “We are happy.” 輸出:“We%20are%20happy.” 題解 class Solution { public:string replaceSpace(stri…

jQuery 元素選擇器集合

jQuery 提供了一套非常強大的元素選擇器,它們可以以各種方式定位和操作網頁文檔中的元素。 以下是 jQuery 中的一些常用選擇器: 1、基本選擇器 #id:選擇 ID 為 id 的元素。.(類選擇器):選擇具有特定類的…

2.5 OJ 網站的使用與作業全解

目錄 1 OJ 網站如何使用 1.1 注冊賬戶 1.2 登錄賬戶 1.3 做題步驟 2 本節課的 OJ 作業說明 3 章節綜合判斷題 4 課時2作業1 5 課時2作業2 6 課時2作業3 1 OJ 網站如何使用 〇J 是英文 Online Judge 的縮寫,中文翻譯過來是在線判題。當用戶將自己編寫的代碼…

基于XC7VX690T FPGA+ZU15EG SOC的6U VPX總線實時信號處理平臺(支持4路光纖)

6U VPX架構,符合VITA46規范板載高性能FPGA處理器:XC7VX690T-2FFG1927I板載1片高性能MPSOC:XCZU15EG-2FFVB1156I板載1片MCU,進行健康管理、時鐘配置等V7 FPGA外掛2個FMC接口兩片FPGA之間通過高速GTH進行互聯 基于6U VPX總線架構的通…