使用手势滚动 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)
我正在用 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)