Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 28, 2012 15:25:31

kins
Зарегистрирован: 2012-08-22
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Dock на PyGtk

кто нибудь знает как на pygtk сделать окно которое ведет себя как например гном-панель т.е. не дает другим окнам перекрывать себя?

Офлайн

#2 Авг. 28, 2012 22:03:29

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Офлайн

#3 Авг. 29, 2012 07:29:23

kins
Зарегистрирован: 2012-08-22
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Dock на PyGtk

Спасибо огромное, именно то что надо!

Офлайн

#4 Март 1, 2023 07:27:08

kins
Зарегистрирован: 2012-08-22
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Dock на PyGtk

В последней версии linux mint нет pygtk. Не нашел как его установить. Может кто знает как установить pygtk в linux mint 21 или есть еще вариант сделать то же самое на gtk3 c помощью PyGObject (тоже не могу найти как)?

Отредактировано kins (Март 1, 2023 08:02:04)

Офлайн

#5 Март 1, 2023 11:08:46

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9730
Репутация: +  843  -
Профиль   Отправить e-mail  

Dock на PyGtk

Поставь GTK
https://www.gtk.org/docs/installations/linux/

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

Там через pip он ставится.



Офлайн

#6 Март 2, 2023 09:40:18

kins
Зарегистрирован: 2012-08-22
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Dock на PyGtk

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

Отредактировано kins (Март 2, 2023 09:41:43)

Прикреплённый файлы:
attachment screenshot108.png (90,9 KБ)

Офлайн

#7 Март 3, 2023 00:04:25

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9730
Репутация: +  843  -
Профиль   Отправить e-mail  

Dock на PyGtk

kins
через pip pygtk не ставится
Через pip3 ставь его.

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

kins
вместо него есть PyGObject
А в питоне, ты думаешь, какой-то свой pygtk? Питоновский pygtk - это просто нашлёпка, которая проводит команды из питона в PyGObject, который в свою очередь делает то же самое - проводит команды из своего языка команд в библиотеку gtk, которая уже в свою очередь отдаёт команды операционной системе через системные вызовы и другие библиотеки системы. Понимаешь, тут одно на другом. И говорить, что из-за одной нашлёпки сверху теперь, оказывается, всё не работает, это можно говорить, когда не понимаешь архитектуры всей этой.



Отредактировано py.user.next (Март 3, 2023 00:13:17)

Офлайн

#8 Март 3, 2023 10:51:38

kins
Зарегистрирован: 2012-08-22
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Dock на PyGtk

через pip3 не ставится. Как установить из исходников?

Прикреплённый файлы:
attachment screenshot109.png (66,6 KБ)

Офлайн

#9 Июль 10, 2023 15:37:27

kins
Зарегистрирован: 2012-08-22
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Dock на PyGtk

После долгих поисков нашел. Вот решение:

 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

Отредактировано kins (Июль 10, 2023 15:41:36)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version