wx python в Wayland не может взаимодействовать с координатами экрана (переместить окно, GetScreenPosition и т. д. c.) - PullRequest
1 голос
/ 10 января 2020

Я нашел это трудным путем. Я углубился в исходный код 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.

edit: python 3.6.9, wx Python 4.0.7, Ubuntu 18.04.1, Gnome 3.28. 4

1 Ответ

1 голос
/ 11 января 2020

https://lists.freedesktop.org/archives/wayland-devel/2015-September/024410.html

Это конструктивное решение в Wayland / десктопе, чтобы вообще не показывать абсолютные позиции окна клиентам. Это означает, что вы просто не можете знать, где находится окно верхнего уровня, вы можете только знать, с какими выходами оно перекрывается.

Вы можете установить переменную окружения GDK_BACKEND=x11 для принудительной установки Xwayland, и проблема будет решена. Это не кажется долгосрочным решением, но оно работает.

...