web-dev-qa-db-fra.com

Comment détecter la taille de l'écran physique d'un ordinateur en GTK

J'ai rencontré ce bug en écrivant mon application. En bref, la taille de la fenêtre de l'application est fixe, ce qui ne fonctionne pas bien avec les écrans plus petits tels que les netbooks.

Dans ceux-ci, les boutons inférieurs sont hors des limites de l'écran et ne peuvent pas être utilisés. J'aimerais prendre cela en compte dans l'interface utilisateur, mais tout d'abord, j'aimerais savoir quel est le moyen standard de détecter la taille d'écran dans GTK, le cas échéant.

Quelqu'un a-t-il des idées sur la manière de procéder?

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

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

10
sil

Voici ce que je suis venu avec:

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 cela s'appelle "standard", mais j'espère que cela aidera.

5
Justin

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

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

Car outre la configuration à écrans multiples, il existe également d'autres problèmes tels que la taille du panneau supérieur, les panneaux inférieurs (ne sont 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 réellement effectuer 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.

3
xubuntix

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()
2
Julien Dubois