2017-10-22 11 views
1

私はPython 3.5とPyQt5でプログラムを書いています。私はそこに項目のリストを持っているQTreeWidgetを持っています。私はスクロールバーを隠して、それを垂直方向にスクロールさせたいと思っています。これは私のコードです:ジェスチャーを使って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にスワイプするとき、それはビューの末尾または先頭になり、正常にスクロールしないということです。

答えて

1

これにはQScrollerクラスを使用する必要があるようです。このようなものが動作するはずと思われる:

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

しかし、私はこれを自分自身をテストすることはできませんので、あなたが望む動作を取得するために少し実験する必要があるかもしれません。

UPDATE:あなたはまた、縦スクロールモードに変更する必要があるかもしれません

self.category_tree.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel) 
+0

こんにちはそれに触れることは、突然最後または最初の項目に行くとき、それはまだ任意の違いを確認しないと私がQScrollerを使用すると、リストの終わりに達したときにウィジェット自体をドラッグするという別の問題が発生し、非常に悪い表示になります。 – Nimda

+0

@Nimda私はかなり 'QScroller'が必要なものだと確信しています。 'Qt.TouchGesture'ではなく' Qt.LeftMouseButtonGesture'で試してみることができますか? – ekhumoro

+0

@ニムダ。試してみるために私の更新された答えを見てください( 'QScroller'の有無にかかわらず)。 – ekhumoro

関連する問題