我想重写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,但控制台上根本没有打印任何内容。
我错过了什么?
最佳答案
您正在覆盖 stepBy
,这意味着您可以更改旋转框中显示的值。在您的代码中,该值根本不会改变。
现在,默认情况下,旋转框的最小值为 0。为零时,向下按钮被禁用。因此,您单击降压按钮不会产生任何输出。
只需在 super(custom_spinbox, ...
之后添加 self.setMinimum( -100 )
即可,您会看到将打印“down”。
至于 QAbstractSpinBox
的子类化,你必须做很多工作才能让它表现得像 QSpinBox
,不值得为这么琐碎的事情付出努力您想要的功能。
关于python - 重写 QSpinBox.stepby 方法使 spinbox 仅增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38296986/