如何在 Python / GTK 中获取总屏幕尺寸而不使用已弃用的 Gdk.Screen.get_width()?

Ing*_*kat 4 python pygtk screen gdk

我想要整个桌面的 X/Y 像素尺寸(可能跨越多个显示器),例如确定背景图像的最佳分辨率。

这段 Python 代码仍然有效:

from gi import require_version
require_version("Gdk", "3.0")
from gi.repository import Gdk
screen = Gdk.Screen.get_default()
print(screen.get_width(), " ", screen.get_height())
Run Code Online (Sandbox Code Playgroud)

但打印出弃用警告:

<string>:7: DeprecationWarning: Gdk.Screen.get_width is deprecated
<string>:7: DeprecationWarning: Gdk.Screen.get_height is deprecated
Run Code Online (Sandbox Code Playgroud)

Gdk.Screen API 文档仅指出:

自版本 3.22 起已弃用:改为使用每个监视器信息

其他答案(例如How do I get Monitor resolution in PythonHow to detector a computer'sphysical screen size in GTK)提到了许多其他 API 和工具包,或者只是提供每个显示器的信息(例如PyGtk),但我认为它应该仍然可以(也在将来)通过 PyGtk 获取整个桌面的尺寸。(毕竟,已弃用的函数仍然提供了此功能。)

use*_*170 6

根据删除这些 API 调用的提交,GDK 用于计算屏幕尺寸的算法似乎基本上是这样的:

def get_screen_size(display):
    mon_geoms = [
        display.get_monitor(i).get_geometry()
        for i in range(display.get_n_monitors())
    ]

    x0 = min(r.x            for r in mon_geoms)
    y0 = min(r.y            for r in mon_geoms)
    x1 = max(r.x + r.width  for r in mon_geoms)
    y1 = max(r.y + r.height for r in mon_geoms)

    return x1 - x0, y1 - y0

# example use
print(get_screen_size(Gdk.Display.get_default()))
Run Code Online (Sandbox Code Playgroud)