我有一个包含少量元素的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)
答案 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
即可。我没有找到任何内置的方法来做你要求的,因此这种解决方法。