PyQT:具有无限滚动的QListWidget

时间:2013-04-26 15:01:52

标签: qt scroll pyqt infinite-scroll qlistwidget

我有一个包含少量元素的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 个答案:

答案 0 :(得分: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即可。我没有找到任何内置的方法来做你要求的,因此这种解决方法。