Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用手势滚动QTreeWidget_Python_Pyqt_Scrollbar_Pyqt5_Qtreewidget - Fatal编程技术网

Python 使用手势滚动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

我正在用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))
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
,效果非常好!