0

我有一个元素很少的 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)
4

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)

只需用QListWidget这个替换你的CircularListWidget,它应该可以工作。我没有找到任何内置方法来做你要求的事情,因此这个解决方法。

于 2013-04-26T17:55:05.533 回答