2017-10-22 30 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

@ 님다. 나는'QScroller '가 당신이 필요로하는 것이라는 것을 확신합니다. 'Qt.TouchGesture' 대신'Qt.LeftMouseButtonGesture'를 시도해 볼 수 있습니까? – ekhumoro

+0

@ 님빠. "QScroller"의 유무에 관계없이 시도해 볼 또 다른 대답은 업데이트 된 답변을 참조하십시오. – ekhumoro