Wayland上的wxpython无法与屏幕坐标交互(移动窗口、获取屏幕位置等)

Wayland上的wxpython无法与屏幕坐标交互(移动窗口、获取屏幕位置等),python,wxpython,wayland,Python,Wxpython,Wayland,我发现这很难。我深入研究了wx.lib.agw.aui.framemanager的源代码,试图找出停靠提示无法正常工作的原因。我已经检查了每一步,直到在计算绘制提示的位置的最后,有一个方法ClientToScreen(self,x,y),它应该返回x,y,偏移量为self:wx.Window,但每次都返回x,y,偏移量相同。然后我尝试在主框架的构造函数中指定起始位置,这对框架的位置没有任何影响。然后我在处理EVT\u MOVE时检查了GetScreenPosition的输出,结果发现EVT\u

我发现这很难。我深入研究了
wx.lib.agw.aui.framemanager
的源代码,试图找出停靠提示无法正常工作的原因。我已经检查了每一步,直到在计算绘制提示的位置的最后,有一个方法
ClientToScreen(self,x,y)
,它应该返回
x,y
,偏移量为
self:wx.Window
,但每次都返回
x,y
,偏移量相同。然后我尝试在主框架的构造函数中指定起始位置,这对框架的位置没有任何影响。然后我在处理
EVT\u MOVE
时检查了
GetScreenPosition
的输出,结果发现
EVT\u MOVE
甚至不会在Wayland上发出,除非您使用
MOVE
或最大化/最小化帧(可能在其他一些情况下,但我只发现了提到的情况)

内部
EVT\u MOVE
handler
GetScreenPosition
返回:

  • (0,0)最大化窗口时
  • 指定的坐标 当被触发时,在
    Move
    中(但
    Move
    本身不起作用)
  • (26,23)
    在其他情况下(包括在其他地方调用)
这是已知的bug吗?也许只有我一个人经历过。如果没有,我将在wxWidgets/Phoenix中添加一个问题

编辑:python 3.6.9、wxPython 4.0.7、Ubuntu 18.04.1、Gnome 3.28.4

Wayland/desktop的设计决定是不暴露绝对值 向客户提供窗口位置。这意味着你根本不能 准确地知道顶级窗口的位置,您只能知道哪个窗口 与之重叠的输出


您可以设置一个环境变量
GDK_BACKEND=x11
来强制Xwayland,问题就解决了。这似乎不是一个长期的解决方案,但它是有效的。

我认为这些问题不会有任何特定于Python的问题,在@RobinDunn上检查是否已经有一张罚单,我在开罚单之前发了这篇文章,因为这似乎是一件非常明显的事情。我甚至不能指定窗口的起始位置,但我还没有看到一个线程/帖子/罚单/问题,甚至没有提到它。我还没有找到一张带有wayland标签的罚单(使用x它可以正常工作),所以我认为这是一个众所周知的问题,或者它与我的系统有关(也许升级gnome或安装一个特定的软件包可以修复它)。@RobinDunn在下面的回答中给出了解释和链接,在wxPython文档中添加一些关于此非功能性的信息会很有用。几周来,我一直在努力使wx.Frame.CentreOnScreen()正常工作。如果医生们说这在韦兰不起作用,我就不会像现在这样睡眠不足。