获取指针的像素位置

问题描述 投票:0回答:3

是否可以使用标准 Python 库获取像素值中的光标位置?

我无法正确定位弹出菜单:

    pos = self.text.GetLastPosition()
    start, end = self.text.PositionToXY(pos)

    self.text.PopupMenuXY(self.popupmenu,start, end)

谢谢!

python wxpython
3个回答
1
投票

不适用于标准 python 库,因为它依赖于平台。在 Windows 上,您可以使用 winapi:

import win32api
x, y = win32api.GetCursorPos()

在 Linux 上你可以使用 xlib:

from Xlib.display import Display   
display = Display()
coord = display.screen().root.query_pointer()._data
x = coord["root_x"]
y = coord["root_y"]

1
投票

要使用wxPython获取鼠标位置,可以使用:

pos = wx.GetMousePosition() # in screen coordinates

这为您提供了屏幕坐标中的 XY 位置作为元组。 如果您需要相对于小部件的位置,则必须通过在小部件上调用 ScreenToClient() 将其转换为客户端坐标。

pos = self.textctrl.ScreenToClient(pos) # relative to textctrl

如果您只想在当前鼠标位置显示弹出菜单,您可以跳过此步骤并调用 PopupMenu() 而不提供位置:

self.PopupMenu(self.popupmenu) # pop up menu at mouse position

0
投票

答案总是“是”。

但是:

  • 目前还没有Python库能够做到这一点
  • 并非每个终端都具备此功能

所以不,不简单。

我对此的看法:

您可以发送(通过 STDOUT 到终端)转义码来激活像素报告 https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Mouse-Tracking

  1. echo -en "\033[1;1'z"
    (DECELR) : 激活鼠标像素位置报告
  2. echo -en "\033"[
    (DECRQLP):请求鼠标位置(结果写入 STDIN)

\033[
是包含
ESC
[
字符的“控制序列引入器”(CSI),可写为:
\e[
\033[
\x1b[

另见:

  1. 使用转义序列获取鼠标位置(以像素为单位)
  2. 如何获取终端中光标的位置?
© www.soinside.com 2019 - 2024. All rights reserved.