QLCDNumber 是 PyQt5 中用于显示类似 LCD 数字效果的控件,适合用于显示数字时钟、计算器或测量仪表等场景。下面从基础开始,带你一步步掌握 QLCDNumber 的使用。
让我们从最基本的例子开始,创建一个显示数字的 LCD 控件:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLCDNumber, QVBoxLayout
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('基础LCD显示')
# 创建LCD控件,设置显示位数为5
lcd = QLCDNumber(5)
# 设置显示数字
lcd.display(12345)
layout = QVBoxLayout()
layout.addWidget(lcd)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
代码解读:
QLCDNumber(5)
创建了一个最多能显示 5 位数字的 LCD 控件display()
方法用于设置要显示的内容,可以是数字或字符串- 这里显示的是整数,实际上也可以显示浮点数、二进制、八进制或十六进制数
LCD 控件可以显示多种进制的数字:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLCDNumber, QVBoxLayout, QHBoxLayout, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('进制显示示例')
lcd = QLCDNumber(8) # 8位显示
# 创建按钮用于切换进制
btn_decimal = QPushButton('十进制')
btn_binary = QPushButton('二进制')
btn_octal = QPushButton('八进制')
btn_hex = QPushButton('十六进制')
# 按钮点击事件处理函数
def set_decimal():
lcd.setMode(QLCDNumber.Dec) # 设置为十进制模式
lcd.display(255)
def set_binary():
lcd.setMode(QLCDNumber.Bin) # 设置为二进制模式
lcd.display(255)
def set_octal():
lcd.setMode(QLCDNumber.Oct) # 设置为八进制模式
lcd.display(255)
def set_hex():
lcd.setMode(QLCDNumber.Hex) # 设置为十六进制模式
lcd.display(255)
# 连接按钮信号到槽函数
btn_decimal.clicked.connect(set_decimal)
btn_binary.clicked.connect(set_binary)
btn_octal.clicked.connect(set_octal)
btn_hex.clicked.connect(set_hex)
# 布局设置
button_layout = QHBoxLayout()
button_layout.addWidget(btn_decimal)
button_layout.addWidget(btn_binary)
button_layout.addWidget(btn_octal)
button_layout.addWidget(btn_hex)
main_layout = QVBoxLayout()
main_layout.addWidget(lcd)
main_layout.addLayout(button_layout)
window.setLayout(main_layout)
window.show()
sys.exit(app.exec_())
代码解读:
setMode()
方法用于设置显示模式,支持四种模式:
QLCDNumber.Dec
(十进制,默认)QLCDNumber.Bin
(二进制)QLCDNumber.Oct
(八进制)QLCDNumber.Hex
(十六进制)- 无论设置哪种进制,
display()
方法都接受十进制数作为参数,控件会自动转换为对应进制显示
LCD 控件可以显示小数点和负号:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLCDNumber, QVBoxLayout
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('小数和负数显示')
# 创建两个LCD控件,分别显示小数和负数
lcd_float = QLCDNumber(8)
lcd_float.setSegmentStyle(QLCDNumber.Filled) # 设置填充样式
lcd_negative = QLCDNumber(8)
lcd_negative.setSegmentStyle(QLCDNumber.Flat) # 设置扁平样式
# 显示浮点数
lcd_float.display(-3.1415)
# 显示负数
lcd_negative.display(-9876)
layout = QVBoxLayout()
layout.addWidget(lcd_float)
layout.addWidget(lcd_negative)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
代码解读:
- 浮点数会自动显示小数点,位数根据实际需要显示
- 负数会自动显示负号
setSegmentStyle()
方法设置数码管的显示样式:
QLCDNumber.Outline
(轮廓样式,默认)QLCDNumber.Filled
(填充样式)QLCDNumber.Flat
(扁平样式)
下面是一个实时更新 LCD 显示的例子,模拟一个简单的秒表:
import sys
import time
from PyQt5.QtWidgets import QLCDNumber, QVBoxLayout, QPushButton
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout
from PyQt5.QtCore import QTimer
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('简易秒表')
lcd = QLCDNumber(8)
lcd.setSegmentStyle(QLCDNumber.Filled)
# 初始化时间和计时器
time_elapsed = 0 # 已过去的时间(秒)
timer = QTimer()
# 开始/暂停按钮
btn_start_stop = QPushButton('开始')
btn_reset = QPushButton('重置')
# 计时器超时处理函数
def update_time():
global time_elapsed
time_elapsed += 1
# 格式化时间为 HH:MM:SS
hours = time_elapsed // 3600
minutes = (time_elapsed % 3600) // 60
seconds = time_elapsed % 60
time_str = f"{hours:02d}:{minutes:02d}:{seconds:02d}"
lcd.display(time_str)
# 开始/暂停按钮点击处理
def toggle_timer():
if timer.isActive():
timer.stop()
btn_start_stop.setText('开始')
else:
timer.start(1000) # 每秒触发一次
btn_start_stop.setText('暂停')
# 重置按钮点击处理
def reset_timer():
global time_elapsed
timer.stop()
time_elapsed = 0
lcd.display("00:00:00")
btn_start_stop.setText('开始')
# 连接信号和槽
timer.timeout.connect(update_time)
btn_start_stop.clicked.connect(toggle_timer)
btn_reset.clicked.connect(reset_timer)
# 初始化显示
lcd.display("00:00:00")
# 布局设置
button_layout = QVBoxLayout()
button_layout.addWidget(btn_start_stop)
button_layout.addWidget(btn_reset)
main_layout = QHBoxLayout()
main_layout.addWidget(lcd)
main_layout.addLayout(button_layout)
window.setLayout(main_layout)
window.show()
sys.exit(app.exec_())
代码解读:
- 使用
QTimer
实现定时更新显示内容- 通过
timer.start(1000)
设置每秒触发一次更新- 显示内容可以是格式化的字符串,不局限于纯数字
- 可以通过
setDigitCount()
方法调整显示位数
可以通过设置字体、颜色等属性来自定义 LCD 控件的显示效果:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLCDNumber, QVBoxLayout, QComboBox
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('自定义LCD显示')
lcd = QLCDNumber(5)
lcd.setSegmentStyle(QLCDNumber.Filled)
lcd.setProperty("intValue", 12345)
# 设置字体
font = QFont()
font.setFamily("Arial")
font.setPointSize(24)
font.setBold(True)
lcd.setFont(font)
# 设置文本颜色
lcd.setStyleSheet("QLCDNumber { color: red; background-color: black; }")
# 创建下拉框用于选择不同的数字
combo = QComboBox()
for i in range(10000, 10010):
combo.addItem(str(i))
# 当下拉框选择变化时更新LCD显示
def update_display():
lcd.display(combo.currentText())
combo.currentIndexChanged.connect(update_display)
# 初始化显示
lcd.display(combo.currentText())
layout = QVBoxLayout()
layout.addWidget(lcd)
layout.addWidget(combo)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
代码解读:
- 通过
setFont()
方法设置显示字体- 使用
setStyleSheet()
方法设置样式表,可以自定义文本颜色和背景颜色- 样式表中的
color
属性设置文本颜色,background-color
设置背景颜色
方法 | 描述 |
---|---|
display(value) |
设置要显示的内容,可以是数字(整数或浮点数)或字符串 |
setMode(mode) |
设置显示模式:Dec (十进制)、Bin (二进制)、Oct (八进制)、Hex (十六进制) |
setSegmentStyle(style) |
设置数码管样式:Outline (轮廓)、Filled (填充)、Flat (扁平) |
setDigitCount(count) |
设置显示的最大位数 |
setSmallDecimalPoint(flag) |
设置是否使用小小数点(默认为 False) |
setFont(font) |
设置显示字体 |
setStyleSheet(style) |
设置样式表,可以自定义文本颜色、背景颜色等 |
信号 | 描述 |
---|---|
overflow() |
当显示的值超出了控件所能显示的范围时发出此信号 |
这个控件虽然功能相对简单,但在需要显示数字的应用场景中非常实用,比如时钟、计算器、测量设备等界面。