覆盖QSpinBox.stepby方法使spinbox只增加

时间:2016-07-10 22:28:48

标签: python qt pyqt5

我想在pyqt5中覆盖QSpinBox的stepBy方法,以便在更改值之前强制进行验证。 但是当我点击"增加"旋转盒的按钮,一切顺利,但"减少"按钮似乎不起作用......为什么只有这个呢?

以下是代码:

class custom_spinbox(PyQt5.QtWidgets.QSpinBox):
    def __init__(self, *args, **kwargs):
        super(custom_spinbox, self).__init__(*args, **kwargs)

    def stepBy(self, step):
        if step == 1:
            print("up")
        if step == -1:
            print("down")

class ui_attr(QWidget):
    def __init__(self, *args, **kwargs):
        super(ui_attr, self).__init__()
        #loading all the stuff
        uic.loadUi("wdg_attr_2.ui", self)

        test = custom_spinbox()
        self.grid.addWidget(test, 1, 1)

    def aff(self):
        self.show()

增量按钮打印"向上"在控制台上,但减量按钮不显示任何内容。 我尝试了继承QAbstractSpinBox而不是QSpinBox,但根本没有在控制台上打印。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

您要覆盖stepBy,这意味着您需要更改旋转框中显示的值。在您的代码中,值根本不会改变。

现在,默认情况下,spinbox的最小值为0.并且在零时,禁用“降低”按钮。因此,单击“降压”按钮不会产生任何输出。

只需在self.setMinimum( -100 )之后添加super(custom_spinbox, ...,您就会看到' down'将被打印。

对于QAbstractSpinBox的子类化,您必须做很多工作才能使其表现得像QSpinBox,这对于如此琐碎的努力是不值得的你想要的功能。