Apa cara termudah untuk mendapatkan resolusi monitor (sebaiknya dalam tuple)?
python
screen
resolution
persegi panjang
sumber
sumber
Tkinter
modul, Anda dapat melakukannya dengan cara ini . Ini adalah bagian dari pustaka Python standar dan berfungsi pada sebagian besar platform Unix dan Windows.Jawaban:
Di Windows:
Jika Anda bekerja dengan layar resolusi tinggi, pastikan interpreter python Anda adalah HIGHDPIAWARE.
Berdasarkan postingan ini .
sumber
highdpiaware
? Ini akan berguna untuk dimasukkan dalam jawaban.Di Windows, Anda juga dapat menggunakan ctypes dengan
GetSystemMetrics()
:sehingga Anda tidak perlu menginstal paket pywin32; itu tidak membutuhkan apa pun yang tidak disertakan dengan Python itu sendiri.
Untuk pengaturan multi-monitor, Anda dapat mengambil lebar dan tinggi gabungan dari monitor virtual:
sumber
GetSystemMetrics(78)
danGetSystemMetrics(79)
kembali?Saya membuat modul PyPI karena alasan ini:
Kode:
Hasil:
Ini mendukung lingkungan multi monitor . Tujuannya adalah menjadi lintas platform; untuk saat ini mendukung Cygwin dan X11 tetapi permintaan tarik sangat diterima.
sumber
pip install cython pyobjus
) sebelum saya dapat menggunakannya di OSXJika Anda menggunakan wxWindows, Anda dapat melakukan:
sumber
app = wx.App(False)
jika tidak, anda mendapatkan "objek wx.App harus diciptakan pertama." kesalahan. 26 suara dan tidak ada yang memeriksa? Apakah bekerja di Windows tanpa memasukkan instance wx ke variabel?Diambil langsung dari jawaban untuk posting ini: Bagaimana cara mendapatkan ukuran layar di Tkinter?
sumber
Di Windows 8.1, saya tidak mendapatkan resolusi yang benar dari ctypes atau tk. Orang lain mengalami masalah yang sama untuk ctypes: getsystemmetrics mengembalikan ukuran layar yang salah Untuk mendapatkan resolusi penuh yang benar dari monitor DPI tinggi di windows 8.1, seseorang harus memanggil SetProcessDPIAware dan menggunakan kode berikut:
Detail Lengkap Di Bawah:
Saya menemukan bahwa ini karena windows melaporkan resolusi berskala. Tampaknya python secara default adalah aplikasi 'system dpi aware'. Jenis aplikasi yang mendukung DPI tercantum di sini: http://msdn.microsoft.com/en-us/library/windows/desktop/dn469266%28v=vs.85%29.aspx#dpi_and_the_desktop_scaling_factor
Pada dasarnya, daripada menampilkan konten dalam resolusi monitor penuh, yang akan membuat font menjadi kecil, konten ditingkatkan hingga font cukup besar.
Di monitor saya, saya mendapatkan:
Resolusi fisik: 2560 x 1440 (220 DPI)
Resolusi python yang dilaporkan: 1555 x 875 (158 DPI)
Per situs windows ini: http://msdn.microsoft.com/en-us/library/aa770067%28v=vs.85%29.aspx Rumus untuk resolusi efektif sistem yang dilaporkan adalah: (Report_px * current_dpi) / (96 dpi ) = physical_px
Saya bisa mendapatkan resolusi layar penuh yang benar, dan DPI saat ini dengan kode di bawah ini. Perhatikan bahwa saya memanggil SetProcessDPIAware () untuk memungkinkan program melihat resolusi sebenarnya.
Yang mengembalikan:
Saya menjalankan windows 8.1 dengan monitor berkemampuan 220 DPI. Skala tampilan saya mengatur DPI saya saat ini ke 158.
Saya akan menggunakan 158 untuk memastikan plot matplotlib saya memiliki ukuran yang tepat dengan: from pylab import rcParams rcParams ['figure.dpi'] = curr_dpi
sumber
Tkinter
menggunakan piksel yang benar, tetapi tidak mengetahui penskalaan dpi sehingga melaporkan ukuran mm yang salah.ctypes.windll.shcore.SetProcessDpiAwareness(2)
mengembalikan kesalahanOSError: [WinError 126] The specified module could not be found
.Dan untuk kelengkapannya, Mac OS X
akan memberi Anda daftar tupel yang berisi semua ukuran layar (jika ada beberapa monitor)
sumber
Jika Anda menggunakan
Qt
toolkit secara khususPySide
, Anda dapat melakukan hal berikut:sumber
Menggunakan Linux, cara paling sederhana adalah dengan menjalankan perintah bash
dan mengurai outputnya menggunakan regexp.
Anda juga dapat melakukannya melalui PyGame: http://www.daniweb.com/forums/thread54881.html
sumber
Berikut adalah program Python kecil cepat yang akan menampilkan informasi tentang pengaturan multi-monitor Anda:
Berikut contoh keluarannya:
sumber
gtk.Window()
mendapatkangdk_default_root_window
? Begitukah cara Anda yakin.get_screen
berisi semua monitor?gtk.Window()
dilakukan adalah membuat jendela baru (lihat di sini ). Jendela hanyalah cara yang digunakanget_screen
untuk mendapatkan informasi monitor. Ini mengembalikan layar tempat jendela aktif (atau akan, jika pernah ditampilkan). Saya kira itu tergantung pada konfigurasi X apakah "layar" itu berisi semua "monitor". Itu terjadi di sistem saya dengan Twinview.Saya menggunakan metode get_screen_resolution di salah satu proyek saya seperti di bawah ini, yang pada dasarnya adalah rantai impor. Anda dapat memodifikasi ini sesuai dengan kebutuhan Anda dengan melepaskan bagian-bagian yang tidak diperlukan dan memindahkan lebih banyak port ke atas dalam rantai.
sumber
Pertanyaan lama tapi ini hilang. Saya baru mengenal python jadi tolong beri tahu saya jika ini adalah solusi yang "buruk". Solusi ini hanya didukung untuk Windows dan MacOS dan hanya berfungsi untuk layar utama - tetapi os tidak disebutkan dalam pertanyaan.
Ukur ukurannya dengan mengambil tangkapan layar. Karena screensize tidak boleh berubah, ini harus dilakukan hanya sekali. Ada solusi yang lebih elegan jika Anda memiliki toolkit gui seperti GTK, wx, ... terinstal.
lihat Bantal
sumber
Versi XWindows:
sumber
Memperluas jawaban @ user2366975 , untuk mendapatkan ukuran layar saat ini dalam pengaturan multi-layar menggunakan Tkinter (kode di Python 2/3):
(Seharusnya berfungsi lintas platform, hanya diuji di Linux)
sumber
Coba kode berikut:
sumber
Jika Anda menginstal PyQt4, coba kode berikut:
Untuk PyQt5, berikut ini akan berfungsi:
sumber
Sebuah platform silang dan cara mudah untuk melakukannya adalah dengan menggunakan TKinter yang hadir dengan hampir semua versi python sehingga Anda tidak perlu menginstal apapun:
sumber
Menggunakan Linux Sebagai ganti regexp, ambil baris pertama dan hapus nilai resolusi saat ini.
Resolusi tampilan saat ini: 0
Ini dilakukan pada xrandr 1.3.5, saya tidak tahu apakah outputnya berbeda pada versi lain, tetapi ini seharusnya membuatnya mudah untuk diketahui.
sumber
Untuk mendapatkan bit per piksel:
parameter di gdi32:
sumber
Coba pyautogui:
sumber
Versi lain menggunakan
xrandr
:sumber
Menggunakan pygame :
[1]
Namun, jika Anda mencoba menyetel jendela ke ukuran layar, Anda mungkin ingin melakukan:
untuk mengatur tampilan Anda ke mode layar penuh. [2]
sumber
Anda bisa menggunakan PyMouse . Untuk mendapatkan ukuran layar cukup gunakan
screen_size()
atribut:a
akan mengembalikan tupel(X, Y)
,, di manaX
posisi horizontal danY
posisi vertikal.Tautan ke fungsi dalam dokumentasi.
sumber
Jika Anda menggunakan OS Windows, Anda dapat menggunakan modul OS untuk mendapatkannya:
Ini akan mengembalikan tupel (Y, X) di mana Y adalah ukuran vertikal dan X adalah ukuran horizontal. Kode ini berfungsi pada Python 2 dan Python 3
sumber
Di Linux kita bisa menggunakan modul subprocess
sumber
Agak merepotkan untuk retina screen, saya menggunakan tkinter untuk mendapatkan ukuran palsu, gunakan pilllow grab untuk mendapatkan ukuran sebenarnya:
sumber
Untuk versi PyGtk yang lebih baru:
sumber
Untuk Linux, Anda dapat menggunakan ini:
sumber
Skrip utilitas menggunakan
pynput
perpustakaan. Posting di sini untuk ref .:sumber