在QListWidget上自定义PyQt多点触控平移手势

时间:2011-02-19 12:40:08

标签: python qt4 pyqt pyqt4 qlistwidget

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

就像现在一样,当我用两根手指上下拖动时,对于我用手指移动的每个像素,列表似乎向上/向下移动一步。这不是我自己实现的,它似乎开箱即用于列表小部件

我希望机芯模仿我手指的速度,即每个x * height_of_item_in_pixels向上/向下移动小部件项目。如果没有对手势系统进行重大攻击,这是否可行? 我该怎么做呢?

我正在使用PyQt 4.8.3和Python 2.6

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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平板电脑上测试)之外,鼠标平移设置还启用了单指平移。