Come rilevare le dimensioni dello schermo fisico di un computer in GTK


8

Ho riscontrato questo errore durante la scrittura della mia app. In breve, le dimensioni della finestra dell'app sono fisse, il che non funziona bene con schermi più piccoli come nei netbook.

In questi, i pulsanti inferiori sono fuori dai limiti dello schermo e non possono essere utilizzati. Vorrei tenerne conto nell'interfaccia utente, ma prima di tutto vorrei scoprire quale sia il modo standard di rilevare le dimensioni dello schermo in GTK, se ce n'è uno.

Qualcuno ha qualche idea su come farlo?


Solo brainstorming: che dire delle configurazioni multi-monitor con dimensioni diverse?
Vilmantas Baranauskas,

Sembra che usare la dimensione dello schermo qui sia la soluzione sbagliata. Ci sono buoni screenshot delle finestre in cui questo è un problema?
Dobey,

Risposte:


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

Naturalmente, se hai più schermi, questo dà la dimensione di un rettangolo che li racchiude entrambi. Questa roba è più dura di quanto sembri, in un mondo con più schermi al suo interno ...


In realtà è necessario colpire il display piuttosto che lo schermo, per ottenere dimensioni del display individuali, IIRC.
Dobey,

Testato il 14.04, funziona.
Seth,

Se hai più di un monitor, le dimensioni dello schermo sono più grandi. La soluzione di cui sopra non funziona se si desidera la dimensione di un monitor . Vedi la risposta di @justin per questo.
Guettli,

Vedo DeprecationWarning: get_width è deprecato
NoBugs

6

Ecco cosa mi è venuto in mente:

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

Non sono sicuro che si chiamerebbe "standard", ma spero che sia di aiuto.


Grazie mille. La tua soluzione funziona anche se la finestra non è ancora stata realizzata.
Guettli,

3

Direi che cosa vuoi è la risposta alla seguente domanda:

Quanto sarebbe grande una finestra se fosse ingrandita?

Perché oltre alla configurazione a più schermi ci sono anche altri problemi come le dimensioni del pannello superiore, dei pannelli inferiori (non più in Ubuntu, ma forse altre distro), decoratori di finestre, ... Questo in realtà non è gestito da Gtk ma dalla finestra manager. Quindi non vedo alcun modo per ottenere questo numero se non si lascia che il gestore delle finestre esegua effettivamente la massimizzazione.

Pertanto la risposta a questa domanda è semplice:

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

Quindi potresti creare una finestra, ingrandirla e quindi iniziare a popolarla con widget di dimensioni ragionevoli.


2

Puoi ottenere larghezza e altezza in millimetri con questo metodo:

from gi.repository import Gdk
display = Gdk.Display.get_default()
monitor = display.get_monitor(0)
return monitor.get_width_mm(), monitor.get_height_mm()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.