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?


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

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


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.


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.


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()
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.