gpt4 book ai didi

python - wheelEvent 上的水平滚动,移位太快

转载 作者:行者123 更新时间:2023-12-05 07:48:45 31 4
gpt4 key购买 nike

我在 MyView 上有 200 个对象,它们派生自 QGraphicsView。我用鼠标滚轮垂直滚动,一切都很好很流畅。我认为这是 Qt 的默认实现。

我实现了 Shift + 滚轮水平滚动,水平滚动条在单个滚轮事件上跳了一大步——比垂直滚动条大 10 倍。

基本上,相同的滚轮事件驱动水平滚动条比垂直滚动条远 10 倍。

如何让水平滚动条变慢?

好吧,我尝试像这样event.angleDelta()/10 来减少原始事件的angleDelta 值来生成一个新的车轮事件并使用新的事件来驱动水平滚动条。这行得通,但似乎太复杂了。

我还注意到影响水平滚动条行为的是 Shift 修饰符。如果我在没有 Shift 修饰符的情况下执行 self.horizo​​ntalBar().wheelEvent(event),则水平条滚动速度会慢 10 倍。那很奇怪。为什么按 Shift 会改变水平滚动行为?!

import sys
from PyQt5.Qt import QGraphicsScene, QGraphicsView, QGraphicsTextItem, QApplication, QWheelEvent, Qt


class MyView(QGraphicsView):
def wheelEvent(self, event: QWheelEvent):
if event.modifiers() == Qt.ShiftModifier:
self.horizontalScrollBar().wheelEvent(event)
else:
self.verticalScrollBar().wheelEvent(event)

if __name__ == '__main__':
app = QApplication(sys.argv)
scene = QGraphicsScene()
view = MyView(scene)

# Generate 200 objects, 100 on x and 100 on y.
for i in range(100):
obj_on_x = QGraphicsTextItem("X" + str(i))
obj_on_x.setX(i * 100)
scene.addItem(obj_on_x)

obj_on_y = QGraphicsTextItem("Y" + str(i))
obj_on_y.setY(i * 100)
scene.addItem(obj_on_y)

view.show()
sys.exit(app.exec_())

最佳答案

为了减慢两个滚动条的速度,我会像这样更改它们的值来与它们交互(在我的代码中,我使用 Ctrl 水平移动滚动条,使用 Shift 垂直移动滚动条):

def wheelEvent(self, event):

delta = event.angleDelta().y()

if event.modifiers() & Qt.ControlModifier:
x = self.horizontalScrollBar().value()
self.horizontalScrollBar().setValue(x - delta)

elif event.modifiers() & Qt.ShiftModifier:
y = self.verticalScrollBar().value()
self.verticalScrollBar().setValue(y + delta)

关于python - wheelEvent 上的水平滚动,移位太快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38234021/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com