#python #linux #gtk3 #pygobject
#python #linux #gtk3 #pygobject
Вопрос:
Мне нужно знать размеры (точно: высота) экрана ниже текущего Gtk.Окно.Наиболее часто рекомендуемый метод:
window = Gtk.Window()
screen = window.get_screen()
h = screen.height()
выполняет работу, но выдает меня DeprecationWarning: Gdk.Screen.height is deprecated
и, вероятно, рано или поздно перестанет работать. Я бы не хотел добавлять какие-либо новые зависимости, поэтому эта классная шпаргалка не поможет.
Ожидается, что мой код будет работать в Linux с многоголовыми настройками, и это должна быть высота текущего экрана.
Ответ №1:
Более подробная информация: программа, над которой я работаю, — это менеджер обоев. Я хочу, чтобы (плавающее) окно использовало все возможное пространство по вертикали и оставляло немного места с обеих сторон, чтобы наблюдать за изменением фона.
Не имея разумного решения, я решил следовать этому ответу.
def check_height_and_start(window):
w, h = window.get_size()
window.destroy()
if common.sway or common.env['wm'] == "i3":
h = h * 0.95
app = GUI(h)
def main():
(...)
w = Gtk.Window() # actually I derived from Gtk.Window to make the window transparent
if common.sway or common.env['wm'] == "i3":
w.fullscreen() # .maximize() doesn't work as expected on sway
else:
w.maximize()
w.present()
GLib.timeout_add(delay_ms, check_height_and_start, w)
Gtk.main()
Таким образом, высота окна не включает панели, если таковые имеются. К сожалению, это не работает с оконными менеджерами окон, поэтому мне пришлось использовать fullscreen()
вместо maximize()
и произвольно уменьшать высоту.
delay_ms
Оптимальное значение зависит от скорости оборудования и используемого WM, что является еще одним неудобством.