在QListWidget上自定义PyQt多点触摸手势

问题描述 投票:3回答:2

我在编写一个简单的记事本应用程序时遇到了问题,我正在教自己一个基本的Python / PyQt。具体来说,我想知道如何更改QListWidget上的多点触摸平移手势灵敏度。

现在,当我用2根手指上下拖动时,列表似乎随着我用手指移动的每个像素向上/向下移动了一步。这是我自己没有实现的东西,似乎对于列表小部件来说是开箱即用的]

我希望该运动模仿我的手指的速度,即,每x * height_of_item_in_pixels向上/向下移动小部件项目一次。无需大量入侵手势系统就能做到吗?我将如何处理?

我正在将PyQt 4.8.3与Python 2.6一起使用

python qt4 pyqt pyqt4 qlistwidget
2个回答
0
投票

很有可能存在此功能,因为您的操作系统将多点触摸事件解释为某种类型的滚动,而QT正在接收滚动操作,而不是直接接收多点触摸操作。


0
投票

有点晚,但也许我可以帮助其他偶然发现此问题的人:

解决方案是将QListWidget的滚动模式设置为ScrollPerPixel(而不是默认的ScrollPerItem):

list_widget.setVerticalScrollMode(list_widget.ScrollPerPixel)

一个最小的例子:

import sys
from PyQt5 import QtWidgets

# create app
app = QtWidgets.QApplication(sys.argv)

# create list widget
list_widget = QtWidgets.QListWidget()

# populate list widget with dummy items
for index in range(100):
    list_widget.addItem(QtWidgets.QListWidgetItem('item {}'.format(index)))

# THIS IS THE IMPORTANT PART: set the scroll mode
list_widget.setVerticalScrollMode(list_widget.ScrollPerPixel)

# OPTIONAL: enable pan by mouse (and one-finger pan)
QtWidgets.QScroller.grabGesture(list_widget.viewport(), 
                                QtWidgets.QScroller.LeftMouseButtonGesture)

# show the list widget
list_widget.show()

# run the event loop
app.exec_()

注:此示例还显示了如何使用鼠标来实现平移,这对于在没有触摸屏的设备上进行测试非常有用。此外,除了默认的两指平移手势(至少在Windows上,在Surface Pro平板电脑上测试)之外,鼠标平移设置还启用了单指平移。

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