【问题标题】:PyQT: QListWidget with infinite scrollingPyQT:具有无限滚动的 QListWidget
【发布时间】:2013-04-20 19:28:43
【问题描述】:

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

【问题讨论】:

    标签: qt scroll pyqt infinite-scroll qlistwidget


    【解决方案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,它应该可以工作。我没有找到任何内置方法来做你要求的事情,因此这个解决方法。

    【讨论】:

      猜你喜欢
      • 2020-10-16
      • 1970-01-01
      • 2019-04-02
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 2016-05-10
      • 1970-01-01
      相关资源
      最近更新 更多