一般上位机界面都会涉及指示灯点亮和指示灯熄灭功能,从网上下载该功能的上位机界面,学习如何使用PyQt5搭建具备指示灯点亮和指示灯熄灭效果的界面。
1. 上位机界面的效果展示
使用PyQt5实现以下界面,界面效果如下,界面图片是从网上搜索得到的:
使用过PyQt5实际完成效果如下:
(1)界面初始化刚打开时的效果:
(2)点击“建立连接”按钮,界面效果如下:
(3)点击“断开连接”按钮,界面上的灯都熄灭了,界面效果如下:
2. 如何创建指示灯增加亮灯和灭灯效果
第一种方法:通过改变标签控件的背景颜色和形状,创建一个指示灯
参考以下文章的方法:PyQt5入门:利用标签控件创建一个指示灯
第二种方法:在label控件上添加图片表示指示灯点亮和熄灭
在阿里巴巴矢量图标库下载指示灯亮灯和灭灯的图片
关键代码:
# 创建一个 QLabel 实例
self.label = QLabel(self)
# 设置 QLabel 显示的图片
self.label.setPixmap(QPixmap('path_to_your_image.jpg'))
设置label上显示图片的大小,python示例代码如下:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt
class ExampleApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建一个QLabel实例
label = QLabel(self)
# 将图片文件路径设置到QLabel上
label.setPixmap(QPixmap('path_to_your_image.jpg'))
# 设置图片的大小,可以使用setFixedSize,或者调整QLabel的大小
# label.setFixedSize(200, 200) # 设置图片显示的大小为200x200
# 或者使用resize方法来调整QLabel的大小
label.resize(200, 200) # 将QLabel的大小设置为200x200
# 设置label的尺寸策略,使得图片能够在QLabel中适当缩放
label.setScaledContents(True)
# 创建一个垂直布局
layout = QVBoxLayout()
layout.addWidget(label)
# 设置窗口的布局
self.setLayout(layout)
# 设置窗口的标题
self.setWindowTitle('Display Image')
# 设置窗口的尺寸
self.setGeometry(300, 300, 300, 300)
# 显示窗口
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = ExampleApp()
sys.exit(app.exec_())
3. 如何在按钮控件上增加图片和文字
python代码示例如下:
import sys
from PyQt5.QtWidgets import QApplication, QPushButton, QWidget, QVBoxLayout, QMainWindow
from PyQt5.QtGui import QIcon
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Button Example")
self.button = QPushButton("Click Me")
self.button.setIcon(QIcon('your_image.png')) # 替换为您的图片路径
self.button.setIconSize(self.button.iconSize())
self.setCentralWidget(self.button)
def main():
app = QApplication(sys.argv)
mainWin = MainWindow()
mainWin.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
4. 如何在label上显示图片和文字
参考文章链接:qlabel显示背景图片加文字
python代码示例如下:
from PyQt5.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget
app = QApplication([])
# 创建一个窗口和布局
window = QWidget()
layout = QVBoxLayout(window)
# 创建一个QLabel控件
label = QLabel()
# 设置样式表,包括背景图片和文字样式
label.setStyleSheet('''
QLabel {
background-image: url("background.jpg");
background-repeat: no-repeat;
background-position: center;
color: white;
font-size: 24px;
}
''')
# 设置标签的文本内容
label.setText('Hello World!')
# 将标签添加到布局中
layout.addWidget(label)
window.show()
app.exec_()
5. 设置QlineEdit控件大小
查找界面上所有的QlineEdit控件,关键代码如下:
# 找到所有的QLineEdit控件
line_edit_obj = self.findChildren(QLineEdit)
for line_edit in line_edit_obj:
line_edit.setFixedSize(100, 40)
使用Qt Designer工具添加QlineEdit控件,sizePolicy的水平策略和垂直策略都设置的“Fixed”固定值,所以设置QlineEdit控件大小使用setFixedSize()函数。
6. 代码实现
main.py代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : Logintern09
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit, QWidget
from PyQt5.QtGui import QPixmap, QIcon
from led import Ui_MainWindow
class mainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super(mainWindow, self).__init__()
self.setupUi(self) # 初始化窗口
# 设置窗口图标
self.setWindowIcon(QIcon('./icon/污染检测系统.png'))
self.comboBox.setFixedSize(120, 30)
self.pushButton.setIcon(QIcon('./icon/开机按钮.png')) # 替换为您的图片路径
self.pushButton.setIconSize(self.pushButton.iconSize())
self.pushButton_9.setIcon(QIcon('./icon/关机按钮.png')) # 替换为您的图片路径
self.pushButton_9.setIconSize(self.pushButton_9.iconSize())
# 找到所有的QLineEdit控件
line_edit_obj = self.findChildren(QLineEdit)
for line_edit in line_edit_obj:
line_edit.setFixedSize(100, 40)
# 设置label的尺寸策略,使得图片能够在QLabel中适当缩放
self.label_2.setScaledContents(True)
# 设置图片的大小,可以使用setFixedSize,或者使用resize调整QLabel的大小
self.label_2.setFixedSize(80, 80) # 设置图片显示的大小为200x200
# 设置 QLabel 显示的图片
self.label_2.setPixmap(QPixmap('./icon/灭灯.png'))
textlabel_list = self.alarm_light_label()
for label in textlabel_list:
# 设置label的尺寸策略,使得图片能够在QLabel中适当缩放
label.setScaledContents(True)
# 设置图片的大小,可以使用setFixedSize,或者使用resize调整QLabel的大小
label.setFixedSize(80, 80) # 设置图片显示的大小为200x200
self.close_light()
self.pushButton.clicked.connect(self.open_light) # 按钮1连接到函数 open_light()
self.pushButton_9.clicked.connect(self.close_light) # 按钮2连接到函数 close_light()
def alarm_light_label(self):
textlabel_list = [self.label_12, self.label_13, self.label_14, self.label_15,
self.label_16, self.label_17]
return textlabel_list
def open_light(self):
self.label_2.setPixmap(QPixmap('./icon/亮灯.png'))
textlabel_list = self.alarm_light_label()
for label in textlabel_list:
label.setPixmap(QPixmap('./icon/亮灯.png'))
def close_light(self):
self.label_2.setPixmap(QPixmap('./icon/灭灯.png'))
textlabel_list = self.alarm_light_label()
for label in textlabel_list:
label.setPixmap(QPixmap('./icon/灭灯.png'))
if __name__ == "__main__":
app = QApplication(sys.argv)
ui = mainWindow()
ui.show()
sys.exit(app.exec_())
Qt Designer工具生成的.ui转成的python代码:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'led.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, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1305, 859)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout_2.setObjectName("gridLayout_2")
self.frame = QtWidgets.QFrame(self.centralwidget)
self.frame.setFocusPolicy(QtCore.Qt.NoFocus)
self.frame.setToolTip("")
self.frame.setStatusTip("")
self.frame.setWhatsThis("")
self.frame.setAccessibleName("")
self.frame.setAccessibleDescription("")
self.frame.setFrameShape(QtWidgets.QFrame.Box)
self.frame.setFrameShadow(QtWidgets.QFrame.Sunken)
self.frame.setLineWidth(2)
self.frame.setObjectName("frame")
self.gridLayout_6 = QtWidgets.QGridLayout(self.frame)
self.gridLayout_6.setObjectName("gridLayout_6")
self.groupBox = QtWidgets.QGroupBox(self.frame)
self.groupBox.setObjectName("groupBox")
self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox)
self.gridLayout_4.setObjectName("gridLayout_4")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setSpacing(200)
self.horizontalLayout.setObjectName("horizontalLayout")
self.label = QtWidgets.QLabel(self.groupBox)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
self.label.setSizePolicy(sizePolicy)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.comboBox = QtWidgets.QComboBox(self.groupBox)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets