【问题标题】: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 正在接收滚动操作,而不是直接接收多点触控操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多