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