【问题标题】:Customize PyQt multi-touch pan gestures on QListWidget在 QListWidget 上自定义 PyQt 多点触控平移手势
【发布时间】:2011-06-30 08:46:15
【问题描述】:
我正在编写一个简单的记事本应用程序,以自学基本的 Python/PyQt。
具体来说,我想知道如何更改 QListWidget 上的多点触控平移手势灵敏度。
就像现在一样,当我用两根手指上下拖动时,我用手指移动的每个像素,列表似乎都向上/向下移动了一步。这不是我自己实现的,它似乎对列表小部件开箱即用
我希望移动模仿我手指的速度,即每 x*height_of_item_in_pixels 向上/向下移动一个小部件项目。如果不对手势系统进行重大入侵,这是否可行?
我该怎么办?
我正在使用 PyQt 4.8.3 和 Python 2.6
【问题讨论】:
标签:
python
qt4
pyqt
pyqt4
qlistwidget
【解决方案1】:
有点晚了,但也许我可以帮助其他偶然发现这个问题的人:
解决方法是将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 平板电脑上测试)之外,鼠标平移设置还启用了单指平移。
【解决方案2】:
很可能存在此功能,因为您的操作系统将多点触控事件解释为某种类型的滚动,并且 QT 正在接收滚动操作,而不是直接接收多点触控操作。