Я нашел это трудным путем. Я погрузился в исходный код wx.lib.agw.aui.framemanager
и попытался выяснить, почему подсказки по стыковке не работают должным образом. Я проверял каждый шаг, пока в самом конце вычисления места для рисования подсказки не появился метод ClientToScreen(self,x,y)
, который должен возвращать x,y
со смещением self: wx.Window
, но каждый раз возвращает x,y
с одним и тем же смещением. Затем я попытался указать начальную позицию в конструкторе моего основного фрейма, что никак не повлияло на положение фрейма. Затем я проверил вывод из GetScreenPosition
при обработке EVT_MOVE
, и оказалось, что EVT_MOVE
даже не излучается на Wayland, за исключением случаев, когда вы используете Move
или максимизируете/минимизируете кадр (возможно, в некоторых других случаях, но я нашел только упомянутые случаи).
Внутри EVT_MOVE
обработчик GetScreenPosition
возвращает:
- (0,0) когда вы максимизируете окно,
- координаты, которые вы указываете в
Move
при его срабатывании (но самMove
не работает) (26, 23)
в других случаях (в том числе вызывая его в других местах)
Это известная ошибка? Может быть, я единственный, кто это испытывает. Если нет, я добавлю проблему в wxWidgets/Phoenix.
изменить: Python 3.6.9, wxPython 4.0.7, Ubuntu 18.04.1, Gnome 3.28.4