PyQt5是Python的GUI编程框架,QDoubleSpinBox是其中的一个控件,可以提供一个带有加减按钮的浮点数输入框。
安装PyQt5
首先需要安装PyQt5,可以使用pip命令来安装:
pip install PyQt5
创建QDoubleSpinBox
使用PyQt5创建一个QDoubleSpinBox非常简单。可以通过以下代码实现:
from PyQt5.QtWidgets import QApplication, QWidget, QDoubleSpinBox, QVBoxLayout
app = QApplication([])
window = QWidget()
spinbox = QDoubleSpinBox()
spinbox.setMaximum(100)
spinbox.setMinimum(0)
layout = QVBoxLayout()
layout.addWidget(spinbox)
window.setLayout(layout)
window.show()
app.exec_()
以上代码创建了一个浮点数输入框,并设置了最大值和最小值,它们分别是100和0。
使用QDoubleSpinBox的信号和槽
QDoubleSpinBox提供了多个信号,例如当值改变时会触发valueChanged()信号。可以通过下面的代码将其与一个槽函数关联:
from PyQt5.QtWidgets import QApplication, QWidget, QDoubleSpinBox, QVBoxLayout, QLabel
app = QApplication([])
window = QWidget()
label = QLabel()
spinbox = QDoubleSpinBox()
spinbox.setMaximum(100)
spinbox.setMinimum(0)
layout = QVBoxLayout()
layout.addWidget(spinbox)
layout.addWidget(label)
window.setLayout(layout)
def on_value_changed(value):
label.setText('Value is {}'.format(value))
spinbox.valueChanged.connect(on_value_changed)
window.show()
app.exec_()
该代码可以在QDoubleSpinBox的值发生变化时在标签上打印出该值。
示例1
下面的示例展示了如何使用QDoubleSpinBox控件来实现两个数相乘的计算器:
from PyQt5.QtWidgets import QApplication, QWidget, QDoubleSpinBox, QVBoxLayout, QLabel
app = QApplication([])
window = QWidget()
label = QLabel()
label.setText('0')
spinbox_1 = QDoubleSpinBox()
spinbox_1.setMaximum(100)
spinbox_1.setMinimum(0)
spinbox_2 = QDoubleSpinBox()
spinbox_2.setMaximum(100)
spinbox_2.setMinimum(0)
layout = QVBoxLayout()
layout.addWidget(spinbox_1)
layout.addWidget(spinbox_2)
layout.addWidget(label)
window.setLayout(layout)
def on_value_changed(value):
result = spinbox_1.value() * spinbox_2.value()
label.setText('Result is {}'.format(result))
spinbox_1.valueChanged.connect(on_value_changed)
spinbox_2.valueChanged.connect(on_value_changed)
window.show()
app.exec_()
示例2
下面的示例展示了如何使用QDoubleSpinBox控件来实现一个类似温度转换器的应用程序,将摄氏度转化为华氏度:
from PyQt5.QtWidgets import QApplication, QWidget, QDoubleSpinBox, QVBoxLayout, QLabel
app = QApplication([])
window = QWidget()
label_1 = QLabel()
label_1.setText('Celsius')
label_2 = QLabel()
label_2.setText('Fahrenheit')
spinbox_celsius = QDoubleSpinBox()
spinbox_celsius.setMaximum(100)
spinbox_celsius.setMinimum(-100)
spinbox_fahrenheit = QDoubleSpinBox()
spinbox_fahrenheit.setMaximum(212)
spinbox_fahrenheit.setMinimum(32)
layout = QVBoxLayout()
layout.addWidget(label_1)
layout.addWidget(spinbox_celsius)
layout.addWidget(label_2)
layout.addWidget(spinbox_fahrenheit)
window.setLayout(layout)
def on_fah_value_changed(value):
celsius = (value - 32) * 5/9
spinbox_celsius.setValue(celsius)
def on_cel_value_changed(value):
fahrenheit = value * 9/5 + 32
spinbox_fahrenheit.setValue(fahrenheit)
spinbox_fahrenheit.valueChanged.connect(on_fah_value_changed)
spinbox_celsius.valueChanged.connect(on_cel_value_changed)
window.show()
app.exec_()
以上代码中,当fahrenheit值发生变化时,on_fah_value_changed()函数会将其转化为摄氏度,并设置到spinbox_celsius中。当spinbox_celsius值发生变化时,on_cel_value_changed()函数会将其转化为华氏度,并设置到spinbox_fahrenheit中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 – QDoubleSpinBox - Python技术站