Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: daks 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"?
-
Tak to opravdu vypadá, že zmiňované nastavení atributů okna nebylo v Qt5 implementováno a musí se udělat pomocí Xlib, nebo XCB:
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])
...
-
Jen pro zajímavost, funkční příklad na: http://pastebin.com/KEbinKMf (http://pastebin.com/KEbinKMf)
Je potřeba nainstalovat balíčky pyqt5 a xlib, na Ubuntu (Mintu) příkazem:
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
-
Vyřešeno zobrazení v KDE4 i 5: http://pastebin.com/ZUHqqDy9 (http://pastebin.com/ZUHqqDy9)
+ vyzkoušeno a funguje na GNOME Shell 3.16
-
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 :)