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 に答える