PyQt5–创建字符串旋转盒

  • Post category:Python

下面是Python中使用PyQt5创建字符串旋转盒的完整使用攻略:

简介

字符串旋转盒(QSpinBox)是 PyQt5 常用的窗口小部件之一,用于显示数字的调整框。利用QSpinBox,我们可以轻松创建一个界面,让用户通过旋转盒来改变数字值。

安装 PyQT5

首先,需要在电脑上安装 PyQt5 包。我们可以通过 pip 命令来安装 PyQt5:

pip install PyQt5

如果你的电脑上没有安装 pip,请先安装 pip。

创建字符串旋转盒

以下示例演示如何创建字符串旋转盒及调整数字值。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QSpinBox, QHBoxLayout, QVBoxLayout, QLabel

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        hbox = QHBoxLayout()
        vbox = QVBoxLayout()

        label = QLabel('Value: 0', self)

        self.spin = QSpinBox(self)
        self.spin.setMaximum(100)

        self.spin.valueChanged.connect(self.updateLabel)

        hbox.addWidget(self.spin)
        vbox.addWidget(label)

        vbox.addLayout(hbox)
        self.setLayout(vbox)

        self.setWindowTitle('QSpinBox')
        self.setGeometry(300, 300, 300, 200)
        self.show()

    def updateLabel(self):

        value = self.spin.value()
        self.label.setText('Value: ' + str(value))

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

以上代码创建一个字符串旋转盒及一个标签,通过旋转盒调整数字值,标签显示当前值。可以看到,我们创建了一个 QSpinBox 实例,并将其加入到QWidget 实例中。

self.spin = QSpinBox(self)
self.spin.setMaximum(100)

通过 setMaximum() 方法可以设置最大值。

self.spin.valueChanged.connect(self.updateLabel)

为 spin 对象添加信号槽,当 spin 值改变时,调用 updateLabel()方法,更新标签内容。

def updateLabel(self):

    value = self.spin.value()
    self.label.setText('Value: ' + str(value))

updateLabel()方法将 spin 值转换为字符串,并用它更新标签。

为字符串旋转盒添加样式

除了基本操作之外,我们还可以为字符串旋转盒添加样式。

可以通过 setStyleSheet() 方法设置字符串旋转盒的样式,比如修改边框颜色、背景颜色等。以下是一个简单的示例:

import sys
from PyQt5.QtWidgets import QApplication, QDialog, QLabel, QSpinBox, QVBoxLayout, QHBoxLayout, QGroupBox
from PyQt5.QtGui import QPainter, QBrush, QColor, QPen
from PyQt5.QtCore import Qt

class Window(QDialog):
    def __init__(self):
        super().__init__()

        self.title = "PyQt5 - Create a string spin box"
        self.top = 200
        self.left = 500
        self.width = 400
        self.height = 300

        self.InitWindow()

    def InitWindow(self):
        vbox = QVBoxLayout()

        self.spinBox = QSpinBox()
        self.spinBox.setMinimum(15)
        self.spinBox.setMaximum(45)
        self.spinBox.setSuffix(" pt")

        vbox.addWidget(self.spinBox)

        groupBox = QGroupBox("String Direction")
        groupBox.setStyleSheet('''
            QGroupBox {
                font-size: 18px;
                font-weight: bold;
                color: #232C51;
                border: 2px solid #232C51;
            }
            QGroupBox::title {
                subcontrol-origin: margin;
                left: 10px;
                padding: 5px 30px 5px 5px;
            }
        ''')

        hbox = QHBoxLayout()
        self.label = QLabel("Hello World !")
        hbox.addWidget(self.label)
        groupBox.setLayout(hbox)

        vbox.addWidget(groupBox)

        self.setLayout(vbox)

        self.setGeometry(self.left, self.top, self.width, self.height)
        self.setWindowTitle(self.title)

        self.spinBox.valueChanged.connect(self.spinDirection)

        self.show()

    def spinDirection(self):
        degrees = self.spinBox.value()

        self.label.setStyleSheet('''
            font-size: 28px;
            font-weight: bold;
            color: #232C51;
            transform: rotate({}deg);
        '''.format(degrees))

if __name__ == "__main__":
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec())        

示例中字符串旋转盒的样式通过 CSS 样式表来设置。

groupBox.setStyleSheet('''
    QGroupBox {
        font-size: 18px;
        font-weight: bold;
        color: #232C51;
        border: 2px solid #232C51;
    }
    QGroupBox::title {
        subcontrol-origin: margin;
        left: 10px;
        padding: 5px 30px 5px 5px;
    }
''')

样式表设置 QGroupBox 标题和内容框的字体大小、颜色、边框,标题偏移量等。

self.label.setStyleSheet('''
    font-size: 28px;
    font-weight: bold;
    color: #232C51;
    transform: rotate({}deg);
'''.format(degrees))

通过 setStyleSheet()方法设置字符串的样式,将度数 degrees 填入字符串中。旋转效果使用transform: rotate()来实现。

小结

这些就是使用 PyQt5 的字符串旋转盒的完整使用攻略,可以通过示例看出,PyQt5 创建一个字符串旋转盒非常简单,只需要少量的代码即可。使用样式表能够将字符串旋转盒变得更加丰富多彩,凸显个性。