Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 3.x 如何将QScrollerProperties应用于QScroller,以消除超调?_Python 3.x_Pyqt5_Gesture - Fatal编程技术网

Python 3.x 如何将QScrollerProperties应用于QScroller,以消除超调?

Python 3.x 如何将QScrollerProperties应用于QScroller,以消除超调?,python-3.x,pyqt5,gesture,Python 3.x,Pyqt5,Gesture,正如标题所说,我正在尝试创建一个使用QScroller和GrabSignature的滚动区域,这样我就可以通过拖动小部件来滚动。我找到了一些很好的例子,并让它发挥作用。现在,我想消除当您拖动的项目超过小部件中的项目时发生的超调。 但是当我尝试调整Qscroller时,我似乎不知道如何将QScrollerProperties应用到Qscroller。这就是我假设您消除超调的方式。 下面是一个代码示例: import sys from PyQt5.QtWidgets import ( QA

正如标题所说,我正在尝试创建一个使用QScroller和GrabSignature的滚动区域,这样我就可以通过拖动小部件来滚动。我找到了一些很好的例子,并让它发挥作用。现在,我想消除当您拖动的项目超过小部件中的项目时发生的超调。
但是当我尝试调整Qscroller时,我似乎不知道如何将QScrollerProperties应用到Qscroller。这就是我假设您消除超调的方式。
下面是一个代码示例:

import sys

from PyQt5.QtWidgets import (
    QApplication,
    QFormLayout,
    QGridLayout,
    QLabel,
    QScrollArea,
    QScroller,
    QScrollerProperties,
    QWidget,
)


class MainWindow(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        scroll_area = QScrollArea()
        layout = QGridLayout(self)
        layout.addWidget(scroll_area)

        scroll_widget = QWidget()
        scroll_layout = QFormLayout(scroll_widget)

        for i in range(200):
            scroll_layout.addRow(QLabel('Label #{}'.format(i)))

        scroll_area.setWidget(scroll_widget)

        scroll = QScroller.scroller(scroll_area.viewport())
        scroll.grabGesture(scroll_area.viewport(), QScroller.LeftMouseButtonGesture)
        scroll.scrollerPropertiesChanged.connect(self.PropsChanged) #Just to see if I could registre a change

        props = scroll.scrollerProperties()
        props.setScrollMetric(QScrollerProperties.VerticalOvershootPolicy,QScrollerProperties.OvershootAlwaysOff)
        props.setScrollMetric(QScrollerProperties.DragStartDistance, 0.01)

        #Apply Qscroller properties here somehow?
        print(scroll.scrollerProperties().scrollMetric(QScrollerProperties.DragStartDistance))
        scroll.scrollerProperties = props #Maybe? Doesn't seem to change the overshoot?


    def PropsChanged(self):
        print("Something is being changed??")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main_window = MainWindow()
    main_window.show()
    sys.exit(app.exec_())
我不知道如何从这里开始。
欢迎提供任何帮助:)

设置新属性后,只需调用
scroll.setScrollerProperties(props)

调用
scrollerProperties()
时,您将获得当前属性的“副本”:它不是指向实际属性的指针,因此除非将它们应用回滚动器,否则不会发生任何更改

这几乎就像调用
self.font()

这几乎适用于任何属性,如标签的
text()
/
setText()
palete()
/
setpalete()

为了防止垂直超调,您必须将
setScrollMetric
VerticalOvershootPolicy
一起使用,并将值设置为OvershootAlwaysOff:

    props.setScrollMetric(QScrollerProperties.VerticalOvershootPolicy, 
        QScrollerProperties.OvershootAlwaysOff)
    scroll.setScrollerProperties(props)


非常感谢,这确实解决了我的问题!我使用pycharm作为编辑,出于某种原因,它没有告诉我(setScrollerProperties)调用QScroller:)@HumbleFumble不客气!我总是更喜欢研究类文档,因为它还可以让人发现更多的见解,IDE自动完成的舒适性有时会让我们有点懒惰;-)干杯,这似乎是个很好的建议。你是指PYQT5文档还是QT C++文档?因为在PyQT5上查找好的文档似乎有点困难,所以任何链接都会非常有用。我通常使用C++文档,因为它们通常与PyQt一致,只需要习惯语法。考虑到有不同之处:在PyQT上不提供一些函数/信号重写,而它提供了一些C++中不存在的其他函数/信号重写;另外,一些C++函数需要一个参数,它是一个指针,它可能不包含在PyQT中,或者可以作为一个附加的返回值返回(像一些QFileDalax的静态,它返回路径和所选的过滤器)。对于这种情况,您可以阅读。
    props.setScrollMetric(QScrollerProperties.VerticalOvershootPolicy, 
        QScrollerProperties.OvershootAlwaysOff)
    scroll.setScrollerProperties(props)