Cara mendeteksi ukuran layar fisik komputer di GTK

8

Saya menemukan bug ini saat menulis aplikasi saya. Singkatnya, ukuran jendela aplikasi sudah diperbaiki, yang tidak berfungsi dengan baik pada layar yang lebih kecil seperti di netbook.

Di dalamnya, tombol-tombol yang lebih rendah di luar batas layar dan tidak dapat digunakan. Saya ingin mempertimbangkan ini di antarmuka pengguna, tetapi pertama-tama, saya ingin mengetahui apa cara standar untuk mendeteksi ukuran layar di GTK, jika ada.

Jadi, adakah yang punya ide tentang cara melakukannya?

David Planella
sumber
Hanya brainstorming: Bagaimana dengan pengaturan multi-monitor dengan ukuran yang berbeda?
Vilmantas Baranauskas
Sepertinya menggunakan ukuran layar di sini adalah solusi yang salah. Apakah ada tangkapan layar windows yang bagus di mana ini menjadi masalah?
dobey

Jawaban:

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

Tentu saja, jika Anda memiliki beberapa layar, ini memberikan ukuran persegi panjang yang melampirkan keduanya. Hal ini lebih sulit daripada kedengarannya, di dunia dengan banyak layar di dalamnya ...

sil
sumber
Anda benar-benar perlu menyodok Tampilan daripada Layar, untuk mendapatkan ukuran layar individual, IIRC.
dobey
Diuji pada 14,04, berfungsi.
Seth
Jika Anda memiliki lebih dari satu monitor ukuran layar lebih besar. Solusi di atas tidak berfungsi jika Anda ingin ukuran monitor . Lihat jawaban @justin untuk itu.
guettli
Saya melihat DeprecationWarning: get_width sudah tidak digunakan lagi
NoBugs
6

Inilah yang saya pikirkan:

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

Saya tidak yakin itu akan disebut 'standar,' tapi saya harap itu membantu.

Justin
sumber
Terima kasih banyak. Solusi Anda berfungsi meskipun jendela belum terealisasi.
guettli
3

Saya akan mengatakan apa yang Anda inginkan adalah jawaban untuk pertanyaan berikut:

Seberapa besar jendela jika dimaksimalkan?

Karena selain pengaturan layar ganda ada juga masalah lain seperti ukuran panel atas, panel bawah (tidak lagi di Ubuntu, tapi mungkin distro lain), dekorator jendela, ... Ini sebenarnya tidak ditangani oleh Gtk tetapi oleh jendela Pengelola. Jadi saya tidak melihat cara untuk mendapatkan nomor ini kecuali Anda membiarkan manajer jendela benar-benar melakukan maksimalisasi.

Karena itu jawaban untuk pertanyaan ini mudah:

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

Jadi Anda bisa membuat jendela, memaksimalkannya dan kemudian mulai mengisinya dengan widget berukuran wajar.

xubuntix
sumber
2

Anda bisa mendapatkan lebar dan tinggi dalam milimeter dengan metode ini:

from gi.repository import Gdk
display = Gdk.Display.get_default()
monitor = display.get_monitor(0)
return monitor.get_width_mm(), monitor.get_height_mm()
Julien Dubois
sumber