PyQt5中如何实现指示灯点亮和指示灯熄灭功能

一般上位机界面都会涉及指示灯点亮和指示灯熄灭功能,从网上下载该功能的上位机界面,学习如何使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

草莓仙生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值