So erkennen Sie die physische Bildschirmgröße eines Computers in GTK

8

Ich bin beim Schreiben meiner App auf diesen Fehler gestoßen. Kurz gesagt, die Fenstergröße der App ist festgelegt, was bei kleineren Bildschirmen wie Netbooks nicht gut funktioniert.

In diesen Fällen befinden sich die unteren Tasten außerhalb der Bildschirmgrenzen und können nicht verwendet werden. Ich möchte dies in der Benutzeroberfläche berücksichtigen, aber zunächst möchte ich herausfinden, wie die Bildschirmgröße in GTK standardmäßig ermittelt wird, falls es eine gibt.

Hat jemand Ideen, wie das geht?

David Planella
quelle
Nur Brainstorming: Was ist mit Multi-Monitor-Setups mit unterschiedlichen Größen?
Vilmantas Baranauskas
Die Verwendung der Bildschirmgröße scheint hier die falsche Lösung zu sein. Gibt es gute Screenshots der Fenster, in denen dies ein Problem darstellt?
Dobey

Antworten:

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

Wenn Sie mehrere Bildschirme haben, ergibt dies natürlich die Größe eines Rechtecks, das beide einschließt. Dieses Zeug ist schwieriger als es sich anhört, in einer Welt mit mehreren Bildschirmen ...

sil
quelle
Sie müssen tatsächlich eher auf das Display als auf den Bildschirm stöbern, um die individuellen Displaygrößen IIRC zu erhalten.
Dobey
Getestet am 14.04, funktioniert es.
Seth
Wenn Sie mehr als einen Monitor haben, ist der Bildschirm größer. Die obige Lösung funktioniert nicht, wenn Sie die Größe eines Monitors wünschen . Siehe dazu die Antwort von @justin.
Guettli
Ich sehe DeprecationWarning: get_width ist veraltet
NoBugs
6

Folgendes habe ich mir ausgedacht:

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

Ich bin mir nicht sicher, ob das als "Standard" bezeichnet wird, aber ich hoffe, dass es hilft.

Justin
quelle
Vielen Dank. Ihre Lösung funktioniert auch dann, wenn das Fenster noch nicht realisiert ist.
Guettli
3

Ich würde sagen, was Sie wollen, ist die Antwort auf die folgende Frage:

Wie groß wäre ein Fenster, wenn es maximiert wäre?

Denn neben der Einrichtung mehrerer Bildschirme gibt es auch andere Probleme wie die Größe des oberen Bedienfelds, der unteren Bedienfelder (nicht mehr in Ubuntu, aber möglicherweise anderer Distributionen), Fensterdekorateure usw. Dies wird eigentlich nicht von Gtk, sondern vom Fenster behandelt Manager. Ich sehe also keine Möglichkeit, diese Nummer zu erhalten, es sei denn, Sie lassen den Fenstermanager tatsächlich die Maximierung durchführen.

Daher ist die Antwort auf diese Frage einfach:

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

Sie können also ein Fenster erstellen, es maximieren und dann mit Widgets angemessener Größe füllen.

xubuntix
quelle
2

Mit dieser Methode können Sie Breite und Höhe in Millimetern ermitteln:

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