Como detectar o tamanho da tela física de um computador no GTK

6

Eu encontrei este bug enquanto escrevia meu aplicativo. Em suma, o tamanho da janela do aplicativo é fixo, o que não funciona bem com telas menores, como nos netbooks.

Nesses, os botões inferiores estão fora dos limites da tela e não podem ser usados. Gostaria de levar isso em conta na interface do usuário, mas antes de tudo, gostaria de descobrir qual é a maneira padrão de detectar o tamanho da tela no GTK, se houver uma.

Então alguém tem alguma idéia de como fazer isso?

    
por David Planella 20.06.2012 / 14:00

3 respostas

8

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

Claro, se você tem várias telas, isso dá o tamanho de um retângulo que os envolve. Esse material é mais difícil do que parece, em um mundo com várias telas ...

    
por sil 20.06.2012 / 14:31
5

Aqui está o que eu criei:

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

Não tenho certeza de que isso seria chamado de "padrão", mas espero que ajude.

    
por Justin 04.06.2013 / 01:39
3

Eu diria que você quer a resposta para a seguinte pergunta:

Qual seria o tamanho de uma janela se fosse maximizada?

Porque além da configuração de tela múltipla também há outros problemas como o tamanho do painel superior, painéis inferiores (não mais no Ubuntu, mas talvez outras distribuições), decoradores de janelas, ... Isso não é tratado pelo Gtk, mas pelo gerenciador de janelas. Então, não vejo como obter esse número, a menos que você deixe o gerenciador de janelas realmente fazer a maximização.

Portanto, a resposta a essa pergunta é 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()

Você pode criar uma janela, maximizá-la e começar a preenchê-la com widgets de tamanho razoável.

    
por xubuntix 21.06.2012 / 07:48