Cómo detectar el tamaño de pantalla física de una computadora en GTK

8

Me encontré con este error al escribir mi aplicación. En resumen, el tamaño de la ventana de la aplicación es fijo, lo que no funciona bien con pantallas más pequeñas como en las netbooks.

En esos, los botones inferiores están fuera de los límites de la pantalla y no se pueden usar. Me gustaría tener esto en cuenta en la interfaz de usuario, pero antes que nada, me gustaría saber cuál es la forma estándar de detectar el tamaño de la pantalla en GTK, si hay una.

Entonces, ¿alguien tiene alguna idea sobre cómo hacer eso?

David Planella
fuente
Solo lluvia de ideas: ¿Qué pasa con las configuraciones de monitores múltiples con diferentes tamaños?
Vilmantas Baranauskas
Parece que usar el tamaño de la pantalla aquí es la solución incorrecta. ¿Hay buenas capturas de pantalla de las ventanas donde esto es un problema?
dobey

Respuestas:

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

Por supuesto, si tiene varias pantallas, esto le da el tamaño de un rectángulo que las encierra a ambas. Esto es más difícil de lo que parece, en un mundo con múltiples pantallas ...

sil
fuente
En realidad, debe tocar la pantalla en lugar de la pantalla, para obtener tamaños de pantalla individuales, IIRC.
dobey
Probado el 14.04, funciona.
Seth
Si tiene más de un monitor, el tamaño de la pantalla es mayor. La solución anterior no funciona si desea el tamaño de un monitor . Vea la respuesta de @justin para eso.
guettli
Veo DeprecationWarning: get_width está en desuso
NoBugs
6

Esto es lo que se me ocurrió:

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

No estoy seguro de que se llamaría 'estándar', pero espero que ayude.

Justin
fuente
Muchas gracias. Su solución funciona incluso si la ventana aún no se ha realizado.
guettli
3

Yo diría que lo que quieres es la respuesta a la siguiente pregunta:

¿Qué tan grande sería una ventana si se maximizara?

Porque además de la configuración de pantalla múltiple también hay otros problemas como el tamaño del panel superior, los paneles inferiores (ya no en Ubuntu, pero tal vez otras distribuciones), decoradores de ventanas, ... Esto en realidad no es manejado por Gtk sino por la ventana gerente. Por lo tanto, no veo ninguna forma de obtener este número a menos que permita que el administrador de ventanas haga la maximización.

Por lo tanto, la respuesta a esta pregunta es fácil:

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

Para que pueda crear una ventana, maximizarla y luego comenzar a llenarla con widgets de tamaño razonable.

xubuntix
fuente
2

Puede obtener el ancho y la altura en milímetros con este método:

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
fuente