Python 使用手势滚动QTreeWidget
我正在用Python 3.5和PyQt5编写一个程序。我有一个QTreeWidget,其中有一个项目列表。我想隐藏滚动条并在垂直方向上对其进行触摸滚动。这是我的代码:Python 使用手势滚动QTreeWidget,python,pyqt,scrollbar,pyqt5,qtreewidget,Python,Pyqt,Scrollbar,Pyqt5,Qtreewidget,我正在用Python 3.5和PyQt5编写一个程序。我有一个QTreeWidget,其中有一个项目列表。我想隐藏滚动条并在垂直方向上对其进行触摸滚动。这是我的代码: self.category_tree = QTreeWidget(self.framemain) self.category_tree.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.category_tree.setHorizontalScro
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))
self.category\u tree=QTreeWidget(self.framemain)
self.category_tree.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.category_tree.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
自我分类树集合几何(QRect(63090161381))
self.category_tree.setLayoutDirection(Qt.rightoleft)
self.category_tree.setLocale(QLocale(QLocale.波斯语,QLocale.Iran))
self.category_tree.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.category_tree.setUniformRowHeights(False)
self.category_tree.setColumnCount(1)
self.category\u tree.setObjectName(“category\u 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(自我、开始、结束):
如果(startx-endx)>=25:
#从右向左滑动
self.category_tree.verticalScrollBar().setSliderPosition(self.category_tree.verticalScrollBar().sliderPosition()+(25))
elif(startx-endx)看起来您需要为此使用该类。这样的事情似乎应该奏效:
QScroller.grabGesture(self.category_tree.viewport(), QScroller.TouchGesture)
但是,我自己无法测试这一点,因此您可能需要进行一些实验,以获得您想要的行为
更新:
您可能还需要更改垂直滚动模式:
self.category_tree.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)
“您好,当触摸它突然进入最后一项或第一项时,它仍然没有任何区别。当我使用QSCROLER时,它会产生另一个问题,当它到达列表末尾时,它会拖拽小部件本身,这会造成一个非常糟糕的视图,@Nimda。”。我很确定你需要的是QScroller
。你能用Qt.LeftMouseButtonGesture
代替Qt.touchspire
吗?@Nimda。请参阅我的更新答案,以获得另一种尝试(有或没有QScroller
)。非常感谢。我使用了Qt.LeftMouseButtonGesture
和ScrollPerPixel
,效果非常好!