带有可编辑单位(后缀)的QDoubleSpinbox

问题描述 投票:0回答:1

我正在尝试制作一个 QDoubleSpinbox,允许输入带单位的自定义公制距离,例如“3.123 毫米”、“2.1 微米”、“10.567 m”。

有什么办法说服QDoubleSpinbox使后缀可编辑吗?

python qt widget pyside qdoublespinbox
1个回答
0
投票

我想通了。不能用

suffix()
,但是还有另一种方法。给你:

from PySide.QtGui import QApplication, QDoubleSpinBox, QValidator, QAbstractSpinBox

class DistanceSpinBox(QDoubleSpinBox):
    def __init__(self, unit='mm', parent=None):
        self.unit = unit
        super().__init__(parent)
        self.setStepType(QAbstractSpinBox.AdaptiveDecimalStepType)
        #self.setKeyboardTracking(False)

    def textFromValue(self, value):
        decimals = self.decimals()
        fmt = f"{{:.{decimals}f}} {self.unit}"
        return fmt.format(value)

    def valueFromText(self, text):
        parts = text.split()
        if not parts:
            return 0.0

        try:
            value = float(parts[0])
        except ValueError:
            value = 0.0

        if len(parts) > 1:
            unit = parts[1]
            if unit:  # (Here I check whether the unit is actually valid)
                self.unit = unit
                self.valueChanged.emit(value)

        return value

    def fixup(self, text):
        value = self.valueFromText(text)
        return self.textFromValue(value)

    def validate(self, text, pos):
        return QValidator.Acceptable, text, pos

if __name__ == '__main__':
    app = QApplication(sys.argv)
    spin_box = DistanceSpinBox()
    spin_box.show()
    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.