2009-12-12 23 views
0

的Python 2.5.4 PyQt4的PyQt4的QSpinBox.selectAll()工作不正常

我子類一QDoubleSpinBox對focusIn事件發出了一個信號:



#Custom widgets for DPL GUI 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

class DPLDoubleSpinBox(QDoubleSpinBox): 

    __pyqtSignals__ = ("valueChanged(double)", "focusIn()") 

    def __init__(self, *args): 
     QDoubleSpinBox.__init__(self, *args) 

    def event(self, event): 
     if(event.type()==QEvent.FocusIn): 
      self.emit(SIGNAL("focusIn()")) 
      #self.clear() Works as expected 
      self.selectAll() #See below     

     return QDoubleSpinBox.event(self, event) 

if __name__ == "__main__": 

    import sys 

    app = QApplication(sys.argv) 
    widget = DPLDoubleSpinBox() 
    widget2 = DPLDoubleSpinBox() 
    widget.show() 
    widget2.show() 
    sys.exit(app.exec_()) 

如果你點擊一個內框,然後殺了其他窗口,它的作品。如果你點擊一個,然後另一個,然後把任何其他窗口集中在桌面上,它似乎工作。

我認爲這是一個焦點問題,但無法追蹤。我只需要它點擊時選擇所有。我試過通過它的行編輯指針來做,但是我得到了相同的結果。試圖強調其他小部件的重點,但仍然是相同的結果。

當它發出「focusIn()」時,您可以連接自定義插槽以觸發。然後你可以使用anyQSpinBox.selectAll(),它可以工作,而不是本身。

回答

0

我改變了事件QEvent.Enter

現在它將會self.selectAll()

我可以用它,因爲它是一個觸摸屏的應用程序,所以它不會很明顯給用戶出了什麼錯。我仍然很想知道我錯過了什麼,或者如果這只是一個錯誤。

2

我知道這個問題已經超過兩年了,但由於它是Google搜索「qspinbox選擇焦點」時的第一個結果之一,我想爲後代留下一個解決方案。

問題是QSpinBox.lineEdit()的行爲。使用focusInEvent,您可以調用selectAll(),但由於某種原因,QLineEdit的mousePressEvent在焦點事件之後立即清除選擇。有關說明,請參閱here

解決方法是爲QSpinBox.lineEdit()小部件或子類QLineEdit安裝事件過濾器並調用QSpinBox.setLineEdit()。無論採用哪種方式,link above都會告訴您如何通過保持布爾標誌並過濾focusInEvent和mousePressEvent來實現所需的行爲。