2013-04-26 8 views
0

몇 개 요소가있는 QListWidget이 있습니다. 목록을 통해 이동하는 것은 화살표 키로 수행됩니다. "무한 루프"를 만드는 방법, 마지막 항목에 도달하여 아래로 내려 가면 선택 항목이 첫 번째 항목으로 점프하고 처음부터 끝까지 되돌아갑니다. 여기에 목록 위젯을 만들기위한 코드의 일부입니다PyQT : QListWidget 무한 스크롤 사용

같은 원형의 목록을 수행하려면, 당신은 QListWidget 서브 클래스의 keyPressEvent() 방법을 무시하고 당신이 이동하기 전에 첫 번째/마지막 행에 있는지 확인할 수 있습니다에서
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

필요한 경우 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) 

은 그냥 QListWidget CircularListWidget이로 교체하고 그것을 작동합니다. 나는 당신이 요구하는 것을 수행 할 내장 메소드를 찾지 못했기 때문에이 해결 방법을 찾는다.