Установите значение QDoubleSpinBox в пустую строку, если не включено - PullRequest
3 голосов
/ 12 февраля 2020

Если у меня есть QDoubleSpinBox и у меня есть метод с именем setEnabled, который принимает логическое значение. Если это значение установлено в False, QDoubleSpinBox будет отображаться серым цветом, показывая число внутри кнопки Spin, но не позволяя пользователю что-либо печатать или взаимодействовать с ним. Я хотел бы внести небольшие изменения, например, когда QDoubleSpinBox не включен, я бы хотел, чтобы значение Spin Button было установлено на пустую строку или не отображалось, и чтобы все предыдущие значения не отображались.

1 Ответ

3 голосов
/ 12 февраля 2020

Одно из возможных решений - показать и скрыть QLineEdit из QDoubleSpinBox, если QDoubleSpinBox включена или отключена соответственно. Чтобы обнаружить изменение состояния включенного свойства, необходимо переопределить метод changeEvent() и проверить событие QEvent::EnabledChange:

import sys

from PyQt5 import QtCore, QtWidgets


class DoubleSpinBox(QtWidgets.QDoubleSpinBox):
    def changeEvent(self, e):
        if e.type() == QtCore.QEvent.EnabledChange:
            self.lineEdit().setVisible(self.isEnabled())
        return super().changeEvent(e)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)

    radiobutton = QtWidgets.QRadioButton("enabled/disabled")
    spinbox = DoubleSpinBox()
    radiobutton.toggled.connect(spinbox.setDisabled)

    w = QtWidgets.QWidget()
    lay = QtWidgets.QVBoxLayout(w)
    lay.addWidget(radiobutton)
    lay.addWidget(spinbox)
    w.show()

    sys.exit(app.exec_())

enter image description here

enter image description here

...