CCCPaste

6668fc8dc29aa

#!/usr/bin/env python3

from PyQt6.QtWidgets import (
    QApplication, QWidget, QHBoxLayout, QVBoxLayout, QPushButton,
    QFrame, QLabel, QSizePolicy, QSpacerItem
)
from PyQt6.QtGui import QPainter, QPaintEvent, QColor, QPen, QBrush, QMouseEvent
from PyQt6.QtCore import Qt, QRect, QSize, QPointF
import sys


# noinspection SpellCheckingInspection
class Bitton(QWidget):
    def __init__(self):
        super().__init__()
        self.power: int= 0
        self.state: bool = False
        self.setMaximumSize(30, 30)

    def mouseReleaseEvent(self, a0):
        self.state = not self.state
        self.update()

    def paintEvent(self, pe: QPaintEvent):
        pen_color: QColor = QColor("#30aa53") if self.state else QColor("#204023")
        brush_color: QColor = QColor("#78ffa3") if self.state else QColor("#258022")
        p: QPainter = QPainter(self)
        p.setRenderHint(QPainter.RenderHint.Antialiasing)
        p.setPen(QPen(pen_color, 3))
        p.setBrush(brush_color)
        p.drawRoundedRect(self.rect().toRectF(), 4.0, 4.0)
        p.drawText(QPointF(), "0")


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Nonbinary, the Decimal/Binary/Hex Calculator")
        self.resize(400, 400)
        self.build_ui()

    def build_ui(self):
        hLayout: QHBoxLayout = QHBoxLayout()
        for b in range(8):
            bit: Bitton = Bitton()
            bit.power = b
            hLayout.addWidget(bit)
            if b == 3: hLayout.addSpacing(4)
        self.setLayout(hLayout)


def main():
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec())


if __name__ == "__main__":
    main()