我遇到过这个错误在编写我的应用程序时。简而言之,应用程序的窗口大小是固定的,这在上网本等较小的屏幕上无法很好地工作。
在这些情况下,下方的按钮超出了屏幕范围,无法使用。我希望在用户界面中考虑到这一点,但首先,我想知道 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()