Найти - Пользователи
Полная версия: Dock на PyGtk
Начало » GUI » Dock на PyGtk
1
kins
кто нибудь знает как на pygtk сделать окно которое ведет себя как например гном-панель т.е. не дает другим окнам перекрывать себя?
kins
Спасибо огромное, именно то что надо!
kins
В последней версии linux mint нет pygtk. Не нашел как его установить. Может кто знает как установить pygtk в linux mint 21 или есть еще вариант сделать то же самое на gtk3 c помощью PyGObject (тоже не могу найти как)?
py.user.next
Поставь GTK
https://www.gtk.org/docs/installations/linux/

Поставь PyGTK
https://pygobject.readthedocs.io/en/latest/getting_started.html

Там через pip он ставится.
kins
через pip pygtk не ставится. Я же пишу что linux mint 21 убрал это вместо него есть PyGObject и он вполне работает. Но я написал приложение которое как панель откусывает часть экрана и не дает окнам его перекрыть. Так вот PyGObject не дает таким же образом это сделать как в PyGTK (http://stackoverflow.com/questions/3859045/preventing-window-overlap-in-gtk) видимо там это где то в другом объекте.
py.user.next
kins
через pip pygtk не ставится
Через pip3 ставь его.

kins
Я же пишу что linux mint 21 убрал это
Да это звучит ахинейно. В Linux Mint ничего не создают и не меняют, это просто сборка. Всё, что тебе не хватает, ты просто доустанавливаешь сам. В том числе и из исходников там можно установить.

kins
вместо него есть PyGObject
А в питоне, ты думаешь, какой-то свой pygtk? Питоновский pygtk - это просто нашлёпка, которая проводит команды из питона в PyGObject, который в свою очередь делает то же самое - проводит команды из своего языка команд в библиотеку gtk, которая уже в свою очередь отдаёт команды операционной системе через системные вызовы и другие библиотеки системы. Понимаешь, тут одно на другом. И говорить, что из-за одной нашлёпки сверху теперь, оказывается, всё не работает, это можно говорить, когда не понимаешь архитектуры всей этой.
kins
через pip3 не ставится. Как установить из исходников?
kins
После долгих поисков нашел. Вот решение:
 import gi
gi.require_version('Gtk','3.0')
from gi.repository import Gtk, Gdk
import Xlib
from Xlib.display import Display
from Xlib import X
display = Display()
topw = display.create_resource_object('window',
                                       window.get_toplevel().get_window().get_xid())
topw.change_property(display.intern_atom('_NET_WM_STRUT'),
                       display.intern_atom('CARDINAL'), 32,
                       [0, 0, bar_size, 0 ],
                       X.PropModeReplace)
topw.change_property(display.intern_atom('_NET_WM_STRUT_PARTIAL'),
                       display.intern_atom('CARDINAL'), 32,
                       [0, 0, bar_size, 0, 0, 0, 0, 0, x, x+width-1, 0, 0],
                       X.PropModeReplace)

Второй вызов что не меняй - визуально ничего не меняется, но без него не работает.
window.get_toplevel().get_window().get_xid() тут в качестве window подставляю окно своего приложения.
bar_size - размер который “откусываем”

взял отсюда https://stackru.com/questions/26652815/kak-zarezervirovat-mesto-na-ekrane-dlya-okna-gtk
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB