PyQT:QListWidget具有无限滚动

PyQT:QListWidget具有无限滚动,qt,scroll,pyqt,infinite-scroll,qlistwidget,Qt,Scroll,Pyqt,Infinite Scroll,Qlistwidget,我有一个只有很少元素的QListWidget。使用箭头键在列表中移动。 如何形成“无限循环”,即到达最后一个项目时,你向下移动,选择跳到第一个项目,如果你想向上移动,则从第一个项目反向移动到最后一个项目? 以下是创建列表小部件的部分代码: self.listWidget = QtGui.QListWidget(Form) self.listWidget.setFont(font) self.listWidget.setFocusPolicy(QtCore.Qt.Stron

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

为了完成这样一个循环列表,您可以子类化
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)
只要用这个
CircularListWidget
替换你的
QListWidget
,它就可以工作了。我没有找到任何内置方法来完成您要求的操作,因此采用了这种变通方法