尝试在PySide2中获取scrollerProperties会导致崩溃

问题描述 投票:0回答:1

我最近一直在开发一个将在 PySide2 中的触摸屏上运行的 GUI,我想通过在触摸屏上轻拂来实现滚动。据我所知,最好的方法是使用 QScroller。我尝试用这个来实现它,但我不喜欢滚动条如何允许水平滚动,即使我禁用了水平滚动条。我在网上看到应该可以通过修改scrollerProperties来禁用它。但是,每当我尝试获取或设置滚动条属性时,整个程序都会立即崩溃。我有以下示例,它重现了我的问题:

from PySide2.QtCore import QSize, QPoint, Qt
from PySide2.QtWidgets import QMainWindow, QWidget, QApplication, QLabel, QScrollArea, QScroller


class ScrollerCrash(QMainWindow):

    def __init__(self):
        QMainWindow.__init__(self, None)
        self.setFixedSize(500, 500)
        self._window = QWidget()
        self.setCentralWidget(self._window)
        self.labels = []

        self.panel = QWidget(self)
        self.panel.resize(QSize(500, 10000))
        for i in range(0, 100):
            label = QLabel(self.panel)
            label.setText(f'Label {i}')
            label.resize(QSize(500, 100))
            label.move(QPoint(0, i * 100))
            label.show()
            self.labels.append(label)

        self.scroll_area = QScrollArea(self)
        self.scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.scroll_area.horizontalScrollBar().setEnabled(False)
        self.scroll_area.resize(QSize(500, 500))
        self.scroll_area.show()
        self.scroll_area.setWidget(self.panel)

        self.scroller = QScroller(self.scroll_area)
        self.scroller.grabGesture(self.scroll_area, QScroller.TouchGesture)
        self.scroller.grabGesture(self.scroll_area, QScroller.LeftMouseButtonGesture)
        print('before getting properties')
        self.props = self.scroller.scrollerProperties()  # Causes a seg fault
        print('after getting properties')


if __name__ == '__main__':
    application = QApplication()
    test = ScrollerCrash()
    test.show()
    application.exec_()

我的PySide2版本是5.15.10。

我想不出任何方法来解决这个问题。我是否缺少某些东西,或者是否有更好的方法来完成我正在做的事情?谢谢!

python qt pyside2
1个回答
0
投票

感谢musicamante,就像使用QScroller.scroller()一样简单,而不是直接创建一个QScroller。当我查看文档时,我不知何故错过了这一点。

© www.soinside.com 2019 - 2024. All rights reserved.