我是Pyside的新手,我需要计算自上次调用 mouseMoveEvent 函数以来x和y轴的移动量
想法是获得鼠标(A)和当前位置(B)的先前位置。我们计算从A开始到B
结束的向量我的问题如下:QMouseEvent没有lastPos()函数,而是pos()函数。因此,我无法获得鼠标的上一个位置(最后记录的位置是创建事件的视图接收的上一个鼠标事件的位置)
在Pygame中,这被称为 pygame.mouse.get_rel()。我怎样才能做到这一点 ?
下面是一个示例代码,用于在按下和移动时打印鼠标的当前位置
# -*- coding: utf-8 -*-
import sys
from PySide import QtGui
class Frame(QtGui.QFrame):
def __init__(self, (width, height)):
super(Frame, self).__init__()
self.setGeometry(0, 0, width, height)
self.setWindowTitle('Frame')
self.show()
self.loop()
def loop(self):
while 1:
self.update()
QtGui.QApplication.processEvents()
def mouseMoveEvent(self, event):
# Get the current position of the mouse
x, y = event.x(), event.y()
print (x, y)
def main():
app = QtGui.QApplication(sys.argv)
Frame((500, 500))
sys.exit(app.exec_())
if __name__ == '__main__':
main()
答案 0 :(得分:0)
我无法在没有PySide
的情况下对此进行测试,我目前无法安装,但我认为你想要这样的东西(阅读NOTE1
和NOTE2
):
import sys
from PySide import QtGui
class Frame(QtGui.QFrame):
def __init__(self, (width, height)):
super(Frame, self).__init__()
# NOTE1: indicate if mouse was clicked
self.clicked= False
self.setGeometry(0, 0, width, height)
self.setWindowTitle('Frame')
self.show()
self.loop()
def loop(self):
while 1:
self.update()
QtGui.QApplication.processEvents()
def mouseMoveEvent(self, event):
# Get the current position of the mouse
x, y = event.x(), event.y()
print (x, y)
def mousePressEvent(self, event):
# NOTE 2: track clicks, not movements
if self.clicked:
# calculate vector
vector = ((self.x, self.y,), (event.x(), event.y(),))
print "vector: %s" % str(vector)
self.clicked = False
return vector
# set vector start
self.x = event.x()
self.y = event.y()
self.clicked = True
print "vector set to start from: (%d,%d)" % (self.x, self.y)
return None
def main():
app = QtGui.QApplication(sys.argv)
Frame((500, 500))
sys.exit(app.exec_())
if __name__ == '__main__':
main()
这样您就可以设置从第一次点击到第二次的矢量,每次鼠标点击都会启动矢量。这可能有一些错误,但这个想法很清楚。如果您希望鼠标跟踪移动而不是单击,请应用相同的原则(在子类中存储最后一个位置,设置标志以查看是否应该计算向量...)到mouseMoveEvent
。
我以后会在我的电脑上测试它。