PyQt5 QDoubleSpinBox – 获取它的行编辑

  • Post category:Python

首先,PyQt5是Python编程语言的GUI(图形用户界面)工具包,其中QDoubleSpinBox是其中提供的浮点数调节器。

获取QDoubleSpinBox的行编辑信息可以使用 text() 函数,而该函数返回的是字符串型的结果。但是,当QDoubleSpinBox中的值发生改变时,我们需要及时更新其行编辑(Line editor)中的值。

以下是如何使用QDoubleSpinBox及其行编辑的详细使用攻略以及两个示例说明:

导入库

from PyQt5.QtWidgets import QApplication, QWidget, QDoubleSpinBox, QHBoxLayout, QVBoxLayout, QLabel
from PyQt5.QtCore import Qt

创建QDoubleSpinBox及LineEdit

app = QApplication([])
window = QWidget()

spinbox = QDoubleSpinBox()
spinbox.setRange(0, 100)
spinbox.setValue(50)

lineedit = spinbox.lineEdit()

将QDoubleSpinBox及LineEdit组装

layout = QHBoxLayout()
layout.addWidget(QLabel('Double SpinBox'))
layout.addWidget(spinbox)
layout.addWidget(QLabel('Line Edit'))
layout.addWidget(lineedit)

window.setLayout(layout)
window.show()

上述代码中,QHBoxLayout和QVBoxLayout是常用来排版QtGUI窗口中的部件的工具类。

例1:更新行编辑器

我们可以定义一个函数 update_lineedit() 来实现当QDoubleSpinBox的值更改时,自动更新它的行编辑器。

def update_lineedit():
    lineedit.setText(spinbox.cleanText())
    lineedit.setCursorPosition(0)

cleanText() 函数会返回一个清除了组分符号的字符串,而 setCursorPosition() 函数将该位置设置在0处。

现在,我们需要将我们定义的该操作函数与QDoubleSpinBox的 valueChanged 信号连接起来。

spinbox.valueChanged.connect(update_lineedit)

完整代码如下:

from PyQt5.QtWidgets import QApplication, QWidget, QDoubleSpinBox, QHBoxLayout, QVBoxLayout, QLabel
from PyQt5.QtCore import Qt

app = QApplication([])
window = QWidget()

spinbox = QDoubleSpinBox()
spinbox.setRange(0, 100)
spinbox.setValue(50)

lineedit = spinbox.lineEdit()

def update_lineedit():
    lineedit.setText(spinbox.cleanText())
    lineedit.setCursorPosition(0)

spinbox.valueChanged.connect(update_lineedit)

layout = QHBoxLayout()
layout.addWidget(QLabel('Double SpinBox'))
layout.addWidget(spinbox)
layout.addWidget(QLabel('Line Edit'))
layout.addWidget(lineedit)

window.setLayout(layout)
window.show()
app.exec_()

例2:调整步进值

下一个例子是当步进值发生变化时自动更新QDoubleSpinBox的行编辑器的值。

def update_lineedit():
    lineedit.setText(spinbox.cleanText())
    lineedit.setCursorPosition(0)

def update_decimal():
    spinbox.setDecimals(decimal_spinbox.value())
    step = float('1')
    for _ in range(decimal_spinbox.value()):
        step /= 10
    spinbox.setSingleStep(step)

spinbox.valueChanged.connect(update_lineedit)

decimal_spinbox = QDoubleSpinBox()
decimal_spinbox.setRange(0, 20)
decimal_spinbox.setValue(spinbox.decimals())
decimal_spinbox.valueChanged.connect(update_decimal)

layout = QVBoxLayout()
layout.addWidget(QLabel('Double SpinBox'))
layout.addWidget(spinbox)
layout.addWidget(QLabel('Line Edit'))
layout.addWidget(lineedit)
layout.addWidget(QLabel('Decimal Places'))
layout.addWidget(decimal_spinbox)

window.setLayout(layout)
window.show()

在上述代码中,我们使用了一个新的QDoubleSpinBox来提供步进值(decimal place)的输入界面。现在,update_decimal() 函数将 decimal_spinbox 的值设置为QDoubleSpinBox的步进值,并通过迭代将步进值更新为QDoubleSpinBox变量后的实际值。

完整代码如下:

from PyQt5.QtWidgets import QApplication, QWidget, QDoubleSpinBox, QHBoxLayout, QVBoxLayout, QLabel
from PyQt5.QtCore import Qt

app = QApplication([])
window = QWidget()

spinbox = QDoubleSpinBox()
spinbox.setRange(0, 100)
spinbox.setValue(50)

lineedit = spinbox.lineEdit()

def update_lineedit():
    lineedit.setText(spinbox.cleanText())
    lineedit.setCursorPosition(0)

def update_decimal():
    spinbox.setDecimals(decimal_spinbox.value())
    step = float('1')
    for _ in range(decimal_spinbox.value()):
        step /= 10
    spinbox.setSingleStep(step)

spinbox.valueChanged.connect(update_lineedit)

decimal_spinbox = QDoubleSpinBox()
decimal_spinbox.setRange(0, 20)
decimal_spinbox.setValue(spinbox.decimals())
decimal_spinbox.valueChanged.connect(update_decimal)

layout = QVBoxLayout()
layout.addWidget(QLabel('Double SpinBox'))
layout.addWidget(spinbox)
layout.addWidget(QLabel('Line Edit'))
layout.addWidget(lineedit)
layout.addWidget(QLabel('Decimal Places'))
layout.addWidget(decimal_spinbox)

window.setLayout(layout)
window.show()
app.exec_()

以上就是关于PyQt5 QDoubleSpinBox获取其行编辑器的完整使用攻略以及两个示例说明的详细介绍。