GTK에서 컴퓨터의 실제 화면 크기를 감지하는 방법


8

나는 건너 한 이 버그 내 응용 프로그램을 작성하는 동안. 즉, 앱의 창 크기는 고정되어있어 넷북과 같은 작은 화면에서는 제대로 작동하지 않습니다.

이 경우 아래쪽 버튼은 화면 제한을 벗어나 사용할 수 없습니다. 사용자 인터페이스에서 이것을 고려하고 싶지만, 우선 GTK에서 화면 크기를 감지하는 표준 방법이 무엇인지 알아 내고 싶습니다.

그래서 어떻게 해야하는지에 대한 아이디어가 있습니까?


브레인 스토밍 : 크기가 다른 멀티 모니터 설정은 어떻습니까?
Vilmantas Baranauskas

여기에 화면 크기를 사용하는 것이 잘못된 해결책 인 것 같습니다. 이것이 문제가되는 창의 스크린 샷이 있습니까?
dove

답변:


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

물론 화면이 여러 개인 경우 두 화면을 모두 포함하는 사각형의 크기가됩니다. 이 물건은 여러 화면이있는 세계에서 소리보다 어렵습니다 ...


개별 디스플레이 크기 (IIRC)를 얻으려면 실제로 화면이 아닌 디스플레이를 찔러야합니다.
dove June

14.04에서 테스트되었으며 작동합니다.
세스

모니터가 둘 이상인 경우 화면 크기가 더 큽니다. 모니터 크기를 원하면 위의 해결책이 작동하지 않습니다 . @justin의 답변을 참조하십시오.
guettli

DeprecationWarning : get_width is deprecated
NoBugs

6

다음은 내가 생각해 낸 것입니다.

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

이것이 '표준'이라고 확신하지는 않지만 도움이 되길 바랍니다.


대단히 감사합니다. 창이 아직 실현되지 않은 경우에도 솔루션이 작동합니다.
guettli

3

나는 당신이 원하는 것은 다음 질문에 대한 대답이라고 말할 것입니다.

창을 최대화하면 얼마나 커질까요?

다중 화면 설정 외에도 상단 패널, 하단 패널 (더 이상 우분투에서는 아니지만 다른 배포판), 창 데코레이터와 같은 다른 문제가 있기 때문에 실제로는 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()

따라서 창을 만들고 최대화 한 다음 적당한 크기의 위젯으로 채울 수 있습니다.


2

이 방법으로 너비와 높이를 밀리미터 단위로 얻을 수 있습니다.

from gi.repository import Gdk
display = Gdk.Display.get_default()
monitor = display.get_monitor(0)
return monitor.get_width_mm(), monitor.get_height_mm()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.