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


8

アプリの作成中にこのバグに遭遇しました。つまり、アプリのウィンドウサイズは固定されており、ネットブックなどの小さな画面ではうまく機能しません。

それらの中で、下のボタンは画面の制限から外れており、使用できません。これをユーザーインターフェースで考慮したいのですが、まず、GTKで画面サイズを検出する標準の方法がある場合、それをGTKで検出する方法を知りたいのです。

それで、誰かがそれを行う方法について何かアイデアを持っていますか?


ブレーンストーミングだけ:異なるサイズのマルチモニター設定はどうですか?
Vilmantas Baranauskas 2012年

ここでの画面サイズの使用は間違った解決策のようです。これが問題となっているウィンドウの良いスクリーンショットはありますか?
dobey

回答:


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

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


個々のディスプレイサイズを取得するには、実際には、画面ではなくディスプレイをつつく必要があります(IIRC)。
dobey

14.04でテストされ、動作します。
Seth

モニターが複数ある場合は、画面サイズが大きくなります。上記のソリューションは、モニターのサイズが必要な場合は機能しません。それについては@justinの答えを見てください。
guettli

DeprecationWarning:get_width is deprecated
NoBugs

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ではなくウィンドウによって処理されますマネージャー。したがって、ウィンドウマネージャーに最大化を実際に行わせない限り、この数を取得する方法はありません。

したがって、この質問に対する答えは簡単です。

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()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.