如何在 GTK 中检测计算机的物理屏幕尺寸

如何在 GTK 中检测计算机的物理屏幕尺寸

我遇到过这个错误在编写我的应用程序时。简而言之,应用程序的窗口大小是固定的,这在上网本等较小的屏幕上无法很好地工作。

在这些情况下,下方的按钮超出了屏幕范围,无法使用。我希望在用户界面中考虑到这一点,但首先,我想知道 GTK 中检测屏幕尺寸的标准方法是什么(如果有的话)。

那么有人知道如何做到这一点吗?

答案1

from gi.repository import Gdk
s = Gdk.Screen.get_default()
print(s.get_width())
print(s.get_height())

当然,如果您有多个屏幕,这将给出包围它们的矩形的大小。在一个有多个屏幕的世界里,这件事比听起来更难……

答案2

以下是我的想法:

from gi.repository import Gdk, Gtk

# Replace w with the GtkWindow of your application
w = Gtk.Window()
# Get the screen from the GtkWindow
s = w.get_screen()
# Using the screen of the Window, the monitor it's on can be identified
m = s.get_monitor_at_window(s.get_active_window())
# Then get the geometry of that monitor
monitor = s.get_monitor_geometry(m)
# This is an example output
print("Heigh: %s, Width: %s" % (monitor.height, monitor.width))

我不确定这是否被称为“标准”,但我希望它有所帮助。

答案3

我想说你想要的是以下问题的答案:

如果窗口最大化的话会有多大?

因为除了多屏幕设置之外,还有其他问题,例如顶部面板、底部面板(不再是 Ubuntu,但可能是其他发行版)、窗口装饰器的大小……这实际上不是由 Gtk 处理的,而是由窗口管理器处理的。所以我认为除非你让窗口管理器实际进行最大化,否则没有办法获得这个数字。

因此这个问题的答案很简单:

from gi.repository import Gtk, GObject
w = Gtk.Window()
w.maximize()
def p():
    print w.get_size()
GObject.timeout_add(1000, p)
w.show()
Gtk.main()

因此,您可以创建一个窗口,最大化它,然后开始用合理大小的小部件填充它。

答案4

您可以使用这种方法获取以毫米为单位的宽度和高度:

from gi.repository import Gdk
display = Gdk.Display.get_default()
monitor = display.get_monitor(0)
return monitor.get_width_mm(), monitor.get_height_mm()

相关内容