Python 3.x 如何将QScrollerProperties应用于QScroller,以消除超调?
正如标题所说,我正在尝试创建一个使用QScroller和GrabSignature的滚动区域,这样我就可以通过拖动小部件来滚动。我找到了一些很好的例子,并让它发挥作用。现在,我想消除当您拖动的项目超过小部件中的项目时发生的超调。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时,我似乎不知道如何将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)