Comment détecter la taille d'écran physique d'un ordinateur dans GTK

8

J'ai rencontré ce bogue lors de l'écriture de mon application. En bref, la taille de la fenêtre de l'application est fixe, ce qui ne fonctionne pas bien avec des écrans plus petits, comme dans les netbooks.

Dans ceux-ci, les boutons inférieurs sont hors limites d'écran et ne peuvent pas être utilisés. J'aimerais en tenir compte dans l'interface utilisateur, mais tout d'abord, j'aimerais savoir quelle est la façon standard de détecter la taille de l'écran dans GTK, s'il y en a une.

Alors, quelqu'un a-t-il des idées sur la façon de procéder?

David Planella
la source
Brainstorming: qu'en est-il des configurations multi-écrans de différentes tailles?
Vilmantas Baranauskas
Il semble que l'utilisation de la taille d'écran ici ne soit pas la bonne solution. Y a-t-il de bonnes captures d'écran des fenêtres où cela pose problème?
dobey
Il y en a quelques-uns dans les rapports de bogues: bugs.launchpad.net/qreator/+bug/1015138/+attachment/3196020/… et launchpadlibrarian.net/107989779/…
David Planella

Réponses:

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

Bien sûr, si vous avez plusieurs écrans, cela donne la taille d'un rectangle les entourant tous les deux. Ce truc est plus difficile qu'il n'y paraît, dans un monde avec plusieurs écrans dedans ...

sil
la source
Vous devez en fait piquer sur l'affichage plutôt que sur l'écran, pour obtenir des tailles d'affichage individuelles, IIRC.
dobey
Testé le 14.04, ça marche.
Seth
Si vous avez plusieurs moniteurs, la taille de l'écran est plus grande. La solution ci-dessus ne fonctionne pas si vous souhaitez la taille d'un moniteur . Voir la réponse de @justin pour cela.
guettli
Je vois DeprecationWarning: get_width est obsolète
NoBugs
6

Voici ce que j'ai trouvé:

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

Je ne suis pas sûr que ce serait appelé «standard», mais j'espère que cela aide.

Justin
la source
Merci beaucoup. Votre solution fonctionne même si la fenêtre n'est pas encore réalisée.
guettli
3

Je dirais que ce que vous voulez est la réponse à la question suivante:

Quelle serait la taille d'une fenêtre si elle était maximisée?

Parce qu'à côté de la configuration à plusieurs écrans, il y a aussi d'autres problèmes comme la taille du panneau supérieur, les panneaux inférieurs (plus dans Ubuntu, mais peut-être d'autres distributions), les décorateurs de fenêtres, ... Ce n'est en fait pas géré par Gtk mais par la fenêtre directeur. Je ne vois donc aucun moyen d'obtenir ce nombre à moins que vous ne laissiez le gestionnaire de fenêtres faire la maximisation.

Par conséquent, la réponse à cette question est simple:

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

Vous pouvez donc créer une fenêtre, l'agrandir, puis commencer à la remplir avec des widgets de taille raisonnable.

xubuntix
la source
2

Vous pouvez obtenir la largeur et la hauteur en millimètres avec cette méthode:

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
la source