python-3.x - 使用 pyqt5 读取特定值时更改 QLCDNumber 颜色

标签 python-3.x user-interface pyqt5 background-color qlcdnumber

我有一个代码可以读取传感器数据并将其输出到 LCD 数字,我正在使用 python3 和 pyqt5。

现在我一直在尝试做的事情是当 LCD 数字达到某个值时更改其背景颜色,但没有成功。例如当该值低于 100 时,LCD 小部件的背景为红色或图像显示太低,如果该值在 100-300 之间,则为绿色,超过 300 则再次变为红色。我希望这是有道理的,有谁知道我如何使用 pyqt5 实现这一目标?

这是我的 LCD 编号代码的相关部分

class Worker(QtCore.QThread):
    valueFound = QtCore.pyqtSignal(int, name="valueFound")

...

def run(self):
        while self.runFlag:
            self.valueFound.emit(self.Pressure_Reading())

...

self.worker = Worker(self)
self.worker.valueFound.connect(self.OnValueFound)

...

def OnValueFound(self, value):
        self.ui.lcdNumber.display(value)

最佳答案

使用 Qt 样式表。

import sys
from random          import randint
from PyQt5.QtWidgets import QApplication, QMainWindow 
from PyQt5.QtCore    import QTimer

from ui import Ui_MainWindow

class Form(QMainWindow):
    def __init__(self):
        super().__init__()

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.i = 0 
        self.voltageMin = 180 
        self.voltageMax = 180
        self.ui.lcdNumberCur.display(self.i)
        self.ui.lcdNumberCur.setStyleSheet("QLCDNumber { background-color: yellow }")

        self.ui.pushButton.clicked.connect(self.startTimer)

        self.timer = QTimer(self)  
        self.timer.setInterval(1000)
        self.timer.timeout.connect(self.updateData)

        self.show()        

    def startTimer(self):  
        if self.ui.pushButton.text() == "Start Timer":
            self.timer.start(1000) 
            self.ui.pushButton.setText("Stop Timer")            
        else:
            self.ui.pushButton.setText("Start Timer")
            self.timer.stop() 

    def updateData(self):
        voltage = randint(80, 350)                  # <--- insert your average voltage here
        self.ui.lcdNumberCur.display(voltage) 
        if voltage > self.voltageMax:
            self.voltageMax = voltage
            self.ui.lcdNumberMax.display(self.voltageMax) 
            if self.voltageMax > 300:
                self.ui.lcdNumberMax.setStyleSheet("""QLCDNumber { 
                                                    background-color: red; 
                                                    color: white; }""")
            else: 
                self.ui.lcdNumberMax.setStyleSheet("""QLCDNumber 
                                                   { background-color: green; 
                                                     color: yellow;
                                                   }""")

        elif voltage < self.voltageMin:
            self.voltageMin = voltage
            self.ui.lcdNumberMin.display(self.voltageMin)  
            if self.voltageMin < 90:
                self.ui.lcdNumberMin.setStyleSheet("""QLCDNumber { 
                                                    background-color: red; 
                                                    color: white; }""")
            else: 
                self.ui.lcdNumberMin.setStyleSheet("""QLCDNumber 
                                                   { background-color: green; 
                                                     color: yellow;
                                                   }""")            


if __name__ == '__main__':
    app = QApplication(sys.argv)
    frm = Form()
    sys.exit(app.exec_())

enter image description here

关于python-3.x - 使用 pyqt5 读取特定值时更改 QLCDNumber 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52312768/

相关文章:

python - 迭代器耗尽,但 For 循环没有错误

ios - Apple Watch 应用可以多次浏览吗?

python - 重写 QSpinBox.stepby 方法使 spinbox 仅增量

python - 破解编码面试,第 6 版,1.7

python >=3.5 : Checking type annotation at runtime

python-3.x - 加载本地数据google colab

user-interface - 用于编写 GUI 应用程序的编程语言

javascript - 如何使用 ID 访问嵌套容器的属性

anaconda - ValueError :PyCapsule_GetPointer called with incorrect name with <from PyQt5. QtWebEngineWidgets导入QWebEnginePage>

python - 没有为 QML ComboBox 定义 modelData,并且在 QAbstractListModel 中具有多个角色