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


8

我在编写应用程序时遇到了这个错误。简而言之,该应用程序的窗口大小是固定的,不适用于上网本等较小的屏幕。

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

那么,有没有人对此有任何想法?


只是集思广益:具有不同大小的多显示器设置如何?
Vilmantas Baranauskas 2012年

似乎在这里使用屏幕尺寸是错误的解决方案。问题所在的窗口是否有良好的屏幕截图?
dobey 2012年

Answers:


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

当然,如果您有多个屏幕,则这给出了将两个屏幕都包围起来的矩形的大小。在拥有多个屏幕的世界中,这些东西比听起来要难。


实际上,您需要在Display(而不是Screen)上戳一下,以获取单独的显示尺寸IIRC。
dobey 2012年

经过14.04测试,可以正常工作。
赛斯2014年

如果您有多个监视器,则屏幕尺寸会更大。如果您需要监视器的大小,上述解决方案将不起作用。看到@justin的答案。
guettli 2015年

我看到DeprecationWarning:不赞成使用
get_width

6

这是我想出的:

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))

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


非常感谢你。即使尚未实现该窗口,您的解决方案仍然有效。
guettli

3

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

如果最大化窗口,窗口将有多大?

因为除了多屏幕设置之外,还存在其他问题,例如顶部面板,底部面板(不再在Ubuntu中,但可能还有其他发行版),窗口装饰器,...的大小,实际上不是由Gtk处理,而是由窗口处理经理。因此,除非您让windowmanager实际上进行最大化,否则我看不到任何获得此数字的方法。

因此,此问题的答案很简单:

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()

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


2

您可以使用以下方法获得以毫米为单位的宽度和高度:

from gi.repository import Gdk
display = Gdk.Display.get_default()
monitor = display.get_monitor(0)
return monitor.get_width_mm(), monitor.get_height_mm()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.