使用手势滚动 QTreeWidget

Scrolling a QTreeWidget with gestures

我正在用 Python 3.5 和 PyQt5 编写程序。我有一个 QTreeWidget,里面有一个项目列表。我想隐藏滚动条并使其在垂直方向上滚动。这是我的代码:

    self.category_tree = QTreeWidget(self.framemain)
    self.category_tree.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
    self.category_tree.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
    self.category_tree.setGeometry(QRect(630, 90, 161, 381))
    self.category_tree.setLayoutDirection(Qt.RightToLeft)
    self.category_tree.setLocale(QLocale(QLocale.Persian, QLocale.Iran))
    self.category_tree.setEditTriggers(QAbstractItemView.NoEditTriggers)
    self.category_tree.setUniformRowHeights(False)
    self.category_tree.setColumnCount(1)
    self.category_tree.setObjectName("category_tree")
    self.category_tree.headerItem().setText(0, "1")
    self.category_tree.setFrameShape(QFrame.NoFrame)
    self.category_tree.header().setVisible(False)
    self.category_tree.header().setSortIndicatorShown(False)
    self.category_tree.setFocusPolicy(Qt.NoFocus)
    self.category_tree.verticalScrollBar().setSingleStep(25)

def checkscroll(self,startx,endx):
    if (startx - endx) >= 25:
    #swipe from right to left
        self.category_tree.verticalScrollBar().setSliderPosition(self.category_tree.verticalScrollBar().sliderPosition()+(25))
    elif (startx - endx) <= -25:
            self.category_tree.verticalScrollBar().setSliderPosition(self.category_tree.verticalScrollBar().sliderPosition()-abs(25))

问题是,当我在 QTreeWidget 上滑动以使其滚动时,它会到达视图的末尾或开始,并且无法正常滚动。

看来您需要为此使用 QScroller class。看起来像这样的东西应该有效:

QScroller.grabGesture(self.category_tree.viewport(), QScroller.TouchGesture)

但是,我自己无法对此进行测试,因此您可能需要进行一些试验才能获得所需的行为。

更新:

您可能还需要更改垂直滚动模式:

self.category_tree.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)