Python, Qt5 a X11

daks

Python, Qt5 a X11
« kdy: 06. 06. 2015, 11:47:36 »
Nedávno jsem zkoušel aplikaci napsanou v Pythonu s použitím Qt4 převést na Qt5, což se celkem povedlo, až na jednu věc - okno aplikace napsané v Qt5 nereaguje na nastavení window.setAttribute(Qt.WA_X11NetWmWindowTypeDesktop), příp. window.setAttribute(Qt.WA_X11NetWmWindowTypeDock).
Nefunguje ani demo na https://github.com/pyqt/python-qt5/blob/master/PyQt5/examples/widgets/windowflags.py
Dělá to na mě dojem, že v případě Qt5 se s během pod zastaralým X11 kvůli Waylandu už moc nepočítá a uvedené nastavení atributů okna nebylo ani implementováno.
Má někdo podobnou zkušenost, nebo případně tip, jak v Qt5 vytvořit okno typu "dock"?


daks

Re:Python, Qt5 a X11
« Odpověď #1 kdy: 08. 06. 2015, 13:16:55 »
Tak to opravdu vypadá, že zmiňované nastavení atributů okna nebylo v Qt5 implementováno a musí se udělat pomocí Xlib, nebo XCB:

Kód: [Vybrat]
from Xlib import display, Xatom
...

disp = display.Display()

_NET_WM_WINDOW_TYPE         = disp.intern_atom("_NET_WM_WINDOW_TYPE")
_NET_WM_WINDOW_TYPE_DESKTOP = disp.intern_atom("_NET_WM_WINDOW_TYPE_DESKTOP")
_NET_WM_WINDOW_TYPE_DOCK    = disp.intern_atom("_NET_WM_WINDOW_TYPE_DOCK")

win = disp.create_resource_object("window", int(window.winId()))
win.change_property(_NET_WM_WINDOW_TYPE, Xatom.ATOM, 32, [_NET_WM_WINDOW_TYPE_DOCK])

...

daks

Re:Python, Qt5 a X11
« Odpověď #2 kdy: 09. 06. 2015, 15:47:56 »
Jen pro zajímavost, funkční příklad na: http://pastebin.com/KEbinKMf

Je potřeba nainstalovat balíčky pyqt5 a xlib, na Ubuntu (Mintu) příkazem:

Kód: [Vybrat]
sudo apt-get install python3-pyqt5 python3-xlib
Běžící aplikace by měla zobrazit okno na všech plochách, pod ostatními okny, bez stínu a ikony na taskbaru.

Vyzkoušeno a funguje na
DE: Mate, Cinnamon, Xfce
WM: Openbox, pekwm, Fluxbox

Nefunguje na KDE4 a E17

daks

Re:Python, Qt5 a X11
« Odpověď #3 kdy: 11. 06. 2015, 12:06:08 »
Vyřešeno zobrazení v KDE4 i 5: http://pastebin.com/ZUHqqDy9
+ vyzkoušeno a funguje na GNOME Shell 3.16

jojo

Re:Python, Qt5 a X11
« Odpověď #4 kdy: 11. 06. 2015, 14:08:19 »
taky se mi to obcas stava - zeptam se - a sam si odpovim :)

jen jsem to zkusil na xfce 4.12

a pridal

atoms = {
    'state_above'  : '_NET_WM_STATE_ABOVE',
...
...

at to umi i zpatky
hezky :)