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

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

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

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

6
задан 20 June 2012 в 17:00

26 ответов

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

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

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

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

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

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

3
ответ дан 25 July 2018 в 18:24
from gi.repository import Gdk
s = Gdk.Screen.get_default()
print s.get_width(), s.get_height()

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

8
ответ дан 25 July 2018 в 18:24

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

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

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

5
ответ дан 25 July 2018 в 18:24
from gi.repository import Gdk
s = Gdk.Screen.get_default()
print s.get_width(), s.get_height()

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

8
ответ дан 31 July 2018 в 11:17

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

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

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

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

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

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

3
ответ дан 31 July 2018 в 11:17

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

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

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

5
ответ дан 31 July 2018 в 11:17

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

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

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

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

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

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

3
ответ дан 31 July 2018 в 12:17

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

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

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

5
ответ дан 31 July 2018 в 12:17
from gi.repository import Gdk
s = Gdk.Screen.get_default()
print s.get_width(), s.get_height()

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

8
ответ дан 31 July 2018 в 12:17
from gi.repository import Gdk
s = Gdk.Screen.get_default()
print s.get_width(), s.get_height()

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

8
ответ дан 2 August 2018 в 00:35

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

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

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

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

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

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

3
ответ дан 2 August 2018 в 00:35

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

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

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

5
ответ дан 2 August 2018 в 00:35

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

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

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

5
ответ дан 4 August 2018 в 16:06
from gi.repository import Gdk
s = Gdk.Screen.get_default()
print s.get_width(), s.get_height()

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

8
ответ дан 4 August 2018 в 16:06

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

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

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

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

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

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

3
ответ дан 4 August 2018 в 16:06

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

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

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

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

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

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

3
ответ дан 6 August 2018 в 00:44
from gi.repository import Gdk
s = Gdk.Screen.get_default()
print s.get_width(), s.get_height()

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

8
ответ дан 6 August 2018 в 00:44

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

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

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

5
ответ дан 6 August 2018 в 00:44
from gi.repository import Gdk
s = Gdk.Screen.get_default()
print s.get_width(), s.get_height()

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

8
ответ дан 7 August 2018 в 18:09

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

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

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

5
ответ дан 7 August 2018 в 18:09

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

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

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

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

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

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

3
ответ дан 10 August 2018 в 06:55
from gi.repository import Gdk
s = Gdk.Screen.get_default()
print s.get_width(), s.get_height()

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

8
ответ дан 10 August 2018 в 06:55

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

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

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

5
ответ дан 10 August 2018 в 06:55

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

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

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

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

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

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

3
ответ дан 15 August 2018 в 18:53
from gi.repository import Gdk
s = Gdk.Screen.get_default()
print s.get_width(), s.get_height()

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

8
ответ дан 15 August 2018 в 18:53
  • 1
    Вам действительно нужно вытолкнуть экран, а не экран, для получения отдельных размеров дисплея, IIRC. – dobey 20 June 2012 в 18:24
  • 2
  • 3
    Если у вас более одного монитора, размер экрана больше. Вышеупомянутое решение не работает, если вы хотите размер монитора . Для этого см. Ответ @justin. – guettli 9 July 2015 в 22: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))

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

5
ответ дан 15 August 2018 в 18:53
  • 1
    Большое спасибо. Ваше решение работает, даже если окно еще не реализовано. – guettli 9 July 2015 в 21:52

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

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