Как проверить текущие размеры экрана в python / Gtk 3.0 без предупреждений об устаревании?

#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, что является еще одним неудобством.