我有一个3d渲染程序,该程序根据鼠标在屏幕上的位置围绕观察者旋转世界。这条线定义了地球旋转的弧度量
glob.worldx=-(w.winfo_pointerxy()[0]-xy[0])/250
其中xy [0]是屏幕中心的x坐标
这意味着观察者视野的旋转量受到鼠标可以移动的距离的限制。如果我能使鼠标回到屏幕中央,则可以解决此问题。有任何想法吗?
好消息是有一种方法可以做到。
中间的消息是,它没有很好的记录。
坏消息是它仅在某些平台上有效。
另一个中间消息是,您至少可以在某些平台上走出Tk。
在Tcl / Tk中执行此操作的方法是使用生成一个<Motion>
事件-warp 1
。有关此文档的文档很少,并且散布在几个不同的页面上(始于bind
),但是此处描述了详细信息。基本上就是这样:
event generate . <Motion> -warp 1 -x 50 -y 50
那么,您如何从Tkinter做到这一点?
好吧,event_generate
没有任何地方有文档记录,<Motion>
事件或warp
参数也没有记录……但是很容易弄清楚是否知道Tk如何映射到Tkinter:
window.event_generate('<Motion>', warp=True, x=50, y=50)
正如您可以通过binding看到的那样,这确实会生成一个事件<Motion>
。这是一个简单的测试程序:
from tkinter import *
root = Tk()
def key(event):
root.event_generate('<Motion>', warp=True, x=50, y=50)
def motion(event):
print('motion {}, {}'.format(event.x, event.y))
root.bind('<Key>', key)
root.bind('<Motion>', motion)
root.mainloop()
运行它,单击窗口以确保它具有焦点,将光标四处移动,您将看到它打印出如下内容:
motion 65, 69
motion 65, 70
motion 65, 71
然后按下一个键,它将打印出以下内容:
motion 50, 50
很棒……除了它可能实际上无法移动光标之外,在这种情况下,所有这一切都使Tk误以为光标已移动。
通过浏览各种论坛,它看起来像:
对于Mac,您要生成并发送NSMouseMoved
事件。最简单的方法是使用pyobjc
(如果您使用的是Apple的Python,它是内置的;否则,您必须安装它):
app = Foundation.NSApplication.sharedApplication()
event = Foundation.NSEvent.mouseEventWithType_location_modifierFlags_timestamp_windowNumber_context_eventNumber_clickCount_pressure_(
Foundation.NSMouseMoved, (50, 50), 0, 0,
app.mainWindow().windowNumber(), None, 0, 0, 0.0)
app.sendEvent_(event)
对于Windows,您想调用SetCursorPos
API,或生成并发送MOUSEEVENT。前者不适用于DirectX游戏;后者可能不适用于远程桌面。对于这种情况,您可能需要前者。无论哪种方式,最简单的方法是install
pywin32
,然后就是:
win32api.SetCursorPos((50, 50))
问题内容: 有没有一种方法可以获取鼠标的位置并将其设置为var? 问题答案: 您可以设置一个回调来响应事件: 我不确定您想要哪种变量。在上面,我设置了局部变量并设置了鼠标坐标。 如果创建类方法,则可以设置实例属性和鼠标坐标,然后可以从其他类方法访问它们。
问题内容: 我正在用Java做一些Swing GUI,我想我的问题很简单。如何设置鼠标的位置? 问题答案: 您需要使用机器人 此类用于生成本机系统输入事件,用于测试自动化,自运行演示以及需要控制鼠标和键盘的其他应用程序。Robot的主要目的是促进Java平台实现的自动化测试。 使用类生成输入事件与将事件发布到AWT事件队列或AWT组件不同,因为事件是在平台的本机输入队列中生成的。例如,实际上将移动
问题内容: 如何根据屏幕尺寸告诉Tkinter窗口打开的位置?我希望它在中间打开。 问题答案: 该答案基于Rachel的答案。她的代码本来就不起作用,但是通过一些调整,我得以解决错误。
我目前有以下的类: 老实说,代码并不重要,请相信我,当用户将鼠标悬停在我的< code>Item对象上时,它会显示一个弹出窗口,如下所示: 这个弹出窗口在我的屏幕中间打开。如果我移动窗口,弹出窗口将在同一位置打开。我需要我的弹出窗口以某种方式在鼠标指针下打开。我知道具有此功能(据称),但我已经致力于设计这个,它具有我的许多设计目标。 这有可能让显示在某个位置吗? 谢谢。
问题内容: 在Linux下如何使用C程序在X窗口中设置 鼠标 光标的位置?谢谢:)(就像WIN中的setcursorpos()一样) 编辑:我尝试过此代码,但不起作用: 问题答案: 12.4- 移动指针 尽管通常 应将 指针的移动留给最终用户控制,但有时有必要在程序控制下将指针移动到新位置。 要将指针移动到窗口中的任意点,请使用XWarpPointer()。 例:
问题内容: 我将Python 2与和一起使用,然后使用。 该程序运行良好,但是每次打开该程序时,窗口都会显示为隐藏状态,因此,直到我单击扩展坞上的图标以将其打开时,该窗口才会出现。 有什么方法可以控制此,使该窗口位于应用程序启动时打开的其他窗口之上? 需要澄清的是,在应用程序运行的整个过程中,它不一定都位于最前面。我只需要它在启动时位于其他窗口之上。 问题答案: 如果我接受您提供的代码并添加第一行