Programación Python: una buena biblioteca de visualización de control LED (luz) basada en PyQt

1. Descripción del control

En Github, me encontré con una biblioteca de control de indicadores LED de terceros basada en PyQt5. Es muy conveniente de usar y la apariencia del control es relativamente hermosa. Lo que es más encomiable es que el código fuente del autor es relativamente conciso, solo alrededor de 200 líneas Como un muy buen ejemplo de aprendizaje de cómo escribir métodos de control personalizados en PyQt. Este control tiene las siguientes características:

Proporciona 3 formas para elegir, a saber: 'cápsula', 'círculo', 'rectángulo', etc.
Proporciona 7 colores para elegir, a saber: 'azul', 'verde', 'naranja', 'violeta', 'rojo ',' amarillo ', etc.
La apariencia del indicador LED bajo diferentes formas y colores es como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí

2. Método de instalación y uso

Use pip para instalar bajo Python:

pip install pyqt-led 

Cuando se usa en el código, simplemente use la siguiente declaración para importar la clase LED de la biblioteca:

from pyqt_led import Led

En esta biblioteca, se proporcionan varias funciones de métodos principales, incluyendo set_on_color, set_off_color, set_shape, turn_on, turn_off y otras funciones para configurar el color y la forma de encendido / apagado del LED, y para configurar el estado de encendido y apagado.

3. Ejemplos de uso

Un ejemplo simple, el código se muestra a continuación:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import numpy as np
from pyqt_led import Led

class Demo(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self._shape = np.array(['capsule', 'circle', 'rectangle'])
        self._color = np.array(['blue', 'green', 'orange', 'purple', 'red',
                                'yellow'])
        self._layout = QGridLayout(self)
        self._create_leds()
        self._arrange_leds()
        self.resize(400, 200)
        self.setWindowTitle('pyqt-led Demo')

    def keyPressEvent(self, e):
        if e.key() == Qt.Key_Escape:
            self.close()

    def _create_leds(self):
        for s in self._shape:
            for c in self._color:
                exec('self._{}_{} = Led(self, on_color=Led.{}, shape=Led.{}, build="debug")'
                     .format(s, c, c, s))
                exec('self._{}_{}.setFocusPolicy(Qt.NoFocus)'.format(s, c))
                exec('self._{}_{}.turn_on(True)'.format(s, c))

    def _arrange_leds(self):
        for r in range(3):
            for c in range(6):
                exec('self._layout.addWidget(self._{}_{}, {}, {}, 1, 1, \
                      Qt.AlignCenter)'
                     .format(self._shape[r], self._color[c], r, c))

app = QApplication(sys.argv)
demo = Demo()
demo.show()
sys.exit(app.exec_())

Después de ejecutar este programa, aparecerá la ventana que se muestra al principio de este artículo que muestra diferentes formas y diferentes colores de LED en una ventana. La pantalla de tiempo de ejecución predeterminada está en el estado completamente iluminado, cuando se establece en el estado completamente apagado, como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
En el código, cuando se crea una instancia de la clase Led, su prototipo de función de constructor es el siguiente:

Led(parent, on_color=green, off_color=black, shape=rectangle, build='release') 

Se pueden pasar los parámetros de la ventana principal, el color brillante inicial, el color apagado, la forma y el estado.

Para situaciones en las que la luz indicadora debe usarse en el desarrollo de programas, como mostrar el estado de ejecución de varios programas, se debe decir que esta es una biblioteca más práctica. Por supuesto, debido a que el código fuente es relativamente simple, también puede modificar aún más la personalización basada en él, como agregar otras formas, colores y otras configuraciones de opciones para cumplir con los requisitos de su propio proyecto.

Reimpreso en: https://zhuanlan.zhihu.com/p/265989343

Supongo que te gusta

Origin blog.csdn.net/lockhou/article/details/113700860
Recomendado
Clasificación