2013-04-26 107 views
0

我有一個QListWidget幾個元素。在列表中移動是通過箭頭鍵完成的。 如何使「無限循環」,意味着最後一個項目已達到你下降,選擇跳轉到第一個項目,如果你想要上升,倒退從第一個到最後一個? 下面是代碼的一部分,用於創建列表控件:PyQT:無限滾動的QListWidget

self.listWidget = QtGui.QListWidget(Form) 
    self.listWidget.setFont(font) 
    self.listWidget.setFocusPolicy(QtCore.Qt.StrongFocus) 
    self.listWidget.setAutoFillBackground(True) 
    self.listWidget.setAlternatingRowColors(True) 
    self.listWidget.setWordWrap(True) 
    self.listWidget.setSelectionRectVisible(True) 
    self.listWidget.setObjectName("listWidget") 
    self.listWidget.hasFocus() 
    self.listWidget.itemActivated.connect(self.klik) 
    self.gridLayout.addWidget(self.listWidget, 0, 0, 1, 1) 

回答

1

爲了做這樣的循環列表,你也可以繼承QListWidget,覆蓋其keyPressEvent()方法,並檢查是否是第一個/最後一排移動之前如果需要,通過setCurrentRow()

class CircularListWidget(QtGui.QListWidget): 
    """ 
    Circular ListWidget. 
    """ 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 

    def keyPressEvent(self, event): 
     if event.key() == QtCore.Qt.Key_Down: 
      if self.currentRow() == self.count()-1: 
       self.setCurrentRow(0) 
       return 
     elif event.key() == QtCore.Qt.Key_Up: 
      if self.currentRow() == 0: 
       self.setCurrentRow(self.count()-1) 
       return 

     # Otherwise, parent behavior 
     super().keyPressEvent(event) 

只需更換您的QListWidgetCircularListWidget,它應該工作。我沒有找到任何內置的方法來做你想要的,因此這個解決方法。