web-dev-qa-db-ja.com

GTKでコンピューターの物理的な画面サイズを検出する方法

私はアプリを書いているときに このバグ に出会いました。要するに、アプリのウィンドウサイズは固定されており、ネットブックなどの小さな画面ではうまく機能しません。

これらでは、下のボタンは画面の制限を超えており、使用できません。ユーザーインターフェイスでこれを考慮したいのですが、まず、GTKで画面サイズを検出する標準的な方法があればそれを見つけたいと思います。

だから誰もそれを行う方法について何かアイデアを持っていますか?

8
David Planella
from gi.repository import Gdk
s = Gdk.Screen.get_default()
print s.get_width(), s.get_height()

もちろん、複数の画面がある場合、これは両方の画面を囲む長方形のサイズを与えます。このようなものは、複数の画面が含まれる世界では、思ったよりも難しいです...

10
sil

ここに私が思いついたものがあります:

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

それが「標準」と呼ばれるかどうかはわかりませんが、役立つことを願っています。

5
Justin

あなたが望むのは、次の質問に対する答えです。

ウィンドウが最大化された場合、ウィンドウはどれくらいの大きさになりますか?

複数画面のセットアップのほかに、トップパネル、ボトムパネル(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()

したがって、ウィンドウを作成し、最大化してから、適切なサイズのウィジェットを追加することができます。

3
xubuntix

このメソッドで幅と高さをミリメートル単位で取得できます:

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