2016-07-10 55 views
0

我想重寫pyqt5中QSpinBox的stepBy方法,以便在更改值之前強制執行驗證。 但用我的代碼,當我點擊spinbox的「增加」按鈕時,一切順利,但「減少」按鈕似乎不工作......爲什麼只有這個?重寫QSpinBox.stepby方法使spinbox僅增量

下面是代碼:

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,但沒有任何東西印在控制檯上。

我錯過了什麼?

+0

你需要什麼樣的驗證?您可以使用'minimum'和'maximum'屬性來限制允許的範圍,或者使用'valueChanged'信號來檢測值的變化。 –

+0

這是一個解決方案,但它讓我覺得按照錯誤的順序做事情:檢查變化,驗證在這種情況下是否可能,如果不可以,則將其顛倒... – Dodrekai

回答

0

您優先於stepBy,這意味着您需要更改spinbox中顯示的值。在你的代碼中,這個值根本不會改變。

現在,默認情況下,spinbox的最小值爲0.並且在零時,step down按鈕被禁用。因此,您單擊降級按鈕不會產生任何輸出。

只需在super(custom_spinbox, ...之後加self.setMinimum(-100),你就會看到'down'會被打印出來。

至於QAbstractSpinBox的子類,你必須做很多工作才能使其表現得像QSpinBox一樣,如果你想要的功能如此微不足道的話,這是不值得的。