PyQt5 QSpinBox – 添加边框

  • Post category:Python

PyQt5 QSpinBox是一个旋转框部件,允许用户通过按下箭头按钮来逐步增加或减少整数值。要添加边框,有以下几个步骤:

步骤1: 导入所需模块

from PyQt5.QtWidgets import QWidget, QSpinBox, QApplication
from PyQt5.QtGui import QPalette, QColor
from PyQt5.QtCore import Qt

以上代码中,PyQt5.QtWidgets用于创建GUI应用程序控件,PyQt5.QtGui用于包含所有视觉和非视觉元素,PyQt5.QtCore用于包含核心非GUI功能。

步骤2: 创建SpinBox控件对象

spin = QSpinBox()

以上代码实例化一个SpinBox对象。

步骤3: 设置边框样式

spin.setStyleSheet("QSpinBox{border: 2px solid gray; border-radius: 5px; padding: 3px}")

可以在QSpinBox的样式表中设置边框样式。在这里,我们设置一个灰色背景的2px宽边框,边角半径设置为5px,并在内部添加3px的填充。

示例1:

下面是一个简单的示例,它创建一个SpinBox对象并将边框设置为灰色。

from PyQt5.QtWidgets import QWidget, QSpinBox, QApplication
from PyQt5.QtGui import QPalette, QColor
from PyQt5.QtCore import Qt

if __name__ == '__main__':
    app = QApplication([])
    widget = QWidget()
    spin = QSpinBox()
    spin.setStyleSheet("QSpinBox{border: 2px solid gray; border-radius: 5px; padding: 3px}")
    widget.setWindowTitle('PyQt5 QSpinBox')
    widget.setGeometry(100, 100, 300, 200)
    widget.setLayout(QVBoxLayout())
    widget.layout().addWidget(spin)
    widget.show()
    app.exec_()

示例2:

下面是另一个示例,其中边框颜色根据用户输入的值而改变。

from PyQt5.QtWidgets import QWidget, QSpinBox, QApplication
from PyQt5.QtGui import QPalette, QColor
from PyQt5.QtCore import Qt

class MySpinBox(QSpinBox):
    def __init__(self, parent=None):
        super(MySpinBox, self).__init__(parent)
        self.valueChanged.connect(self.updateColor)

    def updateColor(self):
        value = self.value()
        palette = self.palette()
        if value < 50:
            color = QColor(Qt.red)
        elif value < 100:
            color = QColor(Qt.yellow)
        else:
            color = QColor(Qt.green)
        palette.setColor(QPalette.Button, color)
        self.setPalette(palette)

if __name__ == '__main__':
    app = QApplication([])
    widget = QWidget()
    spin = MySpinBox()
    spin.setStyleSheet("QSpinBox{border: 2px solid gray; border-radius: 5px; padding: 3px}")
    widget.setWindowTitle('PyQt5 QSpinBox')
    widget.setGeometry(100, 100, 300, 200)
    widget.setLayout(QVBoxLayout())
    widget.layout().addWidget(spin)
    widget.show()
    app.exec_()

以上示例中,我们创建了一个MySpinBox类,它是QSpinBox的子类。在该类的构造函数中,我们连接了一个valueChanged信号到updateColor函数上。在updateColor函数中,我们通过QPalette来改变了SpinBox的背景颜色,颜色的值是根据用户输入的值而改变的。