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
handlerGetScreenPosition
返回:
- (0,0)最大化窗口时
- 指定的坐标
当被触发时,在
中(但Move
本身不起作用)Move
在其他情况下(包括在其他地方调用)(26,23)
您可以设置一个环境变量
GDK_BACKEND=x11
来强制Xwayland,问题就解决了。这似乎不是一个长期的解决方案,但它是有效的。我认为这些问题不会有任何特定于Python的问题,在@RobinDunn上检查是否已经有一张罚单,我在开罚单之前发了这篇文章,因为这似乎是一件非常明显的事情。我甚至不能指定窗口的起始位置,但我还没有看到一个线程/帖子/罚单/问题,甚至没有提到它。我还没有找到一张带有wayland标签的罚单(使用x它可以正常工作),所以我认为这是一个众所周知的问题,或者它与我的系统有关(也许升级gnome或安装一个特定的软件包可以修复它)。@RobinDunn在下面的回答中给出了解释和链接,在wxPython文档中添加一些关于此非功能性的信息会很有用。几周来,我一直在努力使wx.Frame.CentreOnScreen()正常工作。如果医生们说这在韦兰不起作用,我就不会像现在这样睡眠不足。