Python 如何获得鼠标光标的初始位置和最终位置之间的差异?
假设你可以将函数的返回值存储到变量中,这样函数被调用一次,当你使用变量时,你只使用值, 因此,我试图通过两次调用“GetPosion()”来获得位置上的差异 在不同的时间,存储这两个值会得到差值,但差值始终为零 我的问题是为什么这两个变量只调用一次函数? 如果我错了,请纠正我Python 如何获得鼠标光标的初始位置和最终位置之间的差异?,python,wxpython,Python,Wxpython,假设你可以将函数的返回值存储到变量中,这样函数被调用一次,当你使用变量时,你只使用值, 因此,我试图通过两次调用“GetPosion()”来获得位置上的差异 在不同的时间,存储这两个值会得到差值,但差值始终为零 我的问题是为什么这两个变量只调用一次函数? 如果我错了,请纠正我 pos1=event.GetPosition() pos2=event.GetPosition() deff=pos2-pos1 打印(pos1、pos2、deff、“\n”) 因为您没有发布MWE,所以很难说为什么您的
pos1=event.GetPosition()
pos2=event.GetPosition()
deff=pos2-pos1
打印(pos1、pos2、deff、“\n”)
因为您没有发布MWE,所以很难说为什么您的代码没有按预期工作
计算两次连续左键单击的坐标差的一种方法如下所示
带注释的代码:
import wx
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(None, title='Mouse Position',
pos=(300, 150), size=(320, 250))
### To start the x, y variable. self is used so the value is available
### for all methods
self.x = None
self.y = None
self.Show(True)
self.Bind(wx.EVT_LEFT_UP, self.OnClick)
def OnClick(self, event):
#### Last click coordinates
x, y = event.GetPosition()
if self.x == None:
#### First click? then just store the value of x, y
self.x = x
self.y = y
print('First click. Click one more time.')
else:
#### Not the first click? then calculate the difference and
#### update self.x and self.y so they always contain the last
#### set of coordinates
xd = x - self.x
yd = y - self.y
self.x = x
self.y = y
print('deltaX: ' + str(xd) + ' deltaY: ' + str(yd))
app = wx.App()
window = MyFrame()
app.MainLoop()
我发现了问题
它是关于可以表达的时间或位置上的最小差异
所以,如果连续的代码行将在很短的时间内运行,如果这个时间小于可以表示的最小时间,那么它将显示零执行时间或零时间差
鼠标光标的位置也是一样,所以它给了我零。
这就是我所尝试和工作的
从日期时间导入日期时间
导入时间
开始=时间。时间()
对于范围(10000)内的i:
通过
#如果没有延迟,它将始终为零
打印('花费:',time.time()-start)
使用date-time ex时也会发生同样的情况:from datetime import datetime t1=datetime.now()t2=datetime.now()print(t1,t2,t2-t1)答案是零,为什么它会对两个变量调用函数一次???@TariqAbdElghani您能展示一个完整的代码最小工作示例吗?没有看到这一点,我只能推测为什么会有这个问题。我解决了获取位置的问题,但问题是python为什么运行函数并通过所有变量引用相同的返回值,例如:from datetime import datetime import time strat=time.time()t1=datetime.now()t2=datetime.now()t3=datetime.now()t4=datetime.now()t5=datetime.now()打印(t1、t2、t3、t4、t5、t5-t1)打印('it take:',time.time()-strat)
在本例中,两者的差异均为零example@TariqAbdElghanit1,t2。。。t5不是零。它们保存与创建它们的时刻对应的日期时间。他们有不同的价值观。只需在它们之间添加时间。睡眠(1),这样你就可以看到它们之间的值有更大的差异。根据调用datetime.now()的速度和输出的格式,您可以看到0的差异。