Как определить физический размер экрана компьютера в GTK

Я столкнулся с этой ошибкой во время написания своего приложения. Короче говоря, размер окна приложения фиксирован, что не очень хорошо работает на экранах меньшего размера, например в нетбуках.

В них нижние кнопки находятся за пределами экрана и не могут быть использованы. Я хотел бы принять это во внимание в пользовательском интерфейсе, но прежде всего я хотел бы узнать, каков стандартный способ определения размера экрана в GTK, если он есть.

Так у кого-нибудь есть идеи, как это сделать?

8
задан 20 June 2012 в 16:00

4 ответа

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

Конечно, если у вас есть несколько экранов, это дает размер прямоугольника, охватывающего их обоих. Этот материал сложнее, чем кажется в мире с несколькими экранами ...

0
ответ дан 20 June 2012 в 16:00

Вот что я придумал:

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

Я не уверен, что это будет называться «стандартом», но я надеюсь, что это поможет.

0
ответ дан 20 June 2012 в 16:00

Я бы сказал, что вы хотите получить ответ на следующий вопрос:

Насколько большим было бы окно, если бы оно было развернуто?

Потому что помимо настройки нескольких экранов есть и другие такие проблемы, как размер верхней панели, нижних панелей (больше не в Ubuntu, но, возможно, в других дистрибутивах), декораторов окон ... Это на самом деле не обрабатывается Gtk, а диспетчером окон Поэтому я не вижу способа получить это число, если вы не позволите оконному менеджеру на самом деле выполнить максимизацию.

Поэтому ответ на этот вопрос прост:

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

Таким образом, вы можете создать окно, развернуть его, а затем начать заполнять его виджетами разумного размера.

0
ответ дан 20 June 2012 в 16:00

Вы можете получить ширину и высоту в миллиметрах с помощью этого метода:

from gi.repository import Gdk
display = Gdk.Display.get_default()
monitor = display.get_monitor(0)
return monitor.get_width_mm(), monitor.get_height_mm()
0
ответ дан 20 June 2012 в 16:00

Другие вопросы по тегам:

Похожие вопросы: