Jaki jest najprostszy sposób uzyskania rozdzielczości monitora (najlepiej w krotce)?
python
screen
resolution
prostokąt
źródło
źródło
Tkinter
modułowi możesz to zrobić w ten sposób . Jest częścią standardowej biblioteki Pythona i działa na większości platform Unix i Windows.Odpowiedzi:
W systemie Windows:
Jeśli pracujesz z ekranem o wysokiej rozdzielczości, upewnij się, że twój interpreter Pythona to HIGHDPIAWARE.
Na podstawie tego postu.
źródło
highdpiaware
? Przydałoby się to uwzględnić w odpowiedzi.W systemie Windows możesz również używać ctypów z
GetSystemMetrics()
:aby nie trzeba było instalować pakietu pywin32; nie potrzebuje niczego, co nie jest dostarczane z samym Pythonem.
W przypadku konfiguracji z wieloma monitorami można pobrać łączną szerokość i wysokość monitora wirtualnego:
źródło
GetSystemMetrics(78)
iGetSystemMetrics(79)
wraca?Stworzyłem moduł PyPI z tego powodu:
Kod:
Wynik:
Obsługuje środowiska wielomonitorowe . Jego celem jest działanie na wielu platformach; na razie obsługuje Cygwin i X11, ale żądania ściągnięcia są całkowicie mile widziane.
źródło
pip install cython pyobjus
), Zanim mogłem go używać na OSXJeśli używasz wxWindows, możesz po prostu:
źródło
app = wx.App(False)
przeciwnym razie zostanie wyświetlony komunikat „najpierw należy utworzyć obiekt wx.App”. błąd. 26 głosów i nikt nie sprawdził? Czy działa w systemie Windows bez przypisywania wystąpienia wx do zmiennej?Zaczerpnięte bezpośrednio z odpowiedzi na ten post: Jak uzyskać rozmiar ekranu w Tkinter?
źródło
W systemie Windows 8.1 nie otrzymuję prawidłowej rozdzielczości ani z ctypes, ani z tk. Inni ludzie mają ten sam problem z ctypes : getsystemmetrics zwraca nieprawidłowy rozmiar ekranu Aby uzyskać prawidłową pełną rozdzielczość monitora o wysokiej rozdzielczości w systemie Windows 8.1, należy wywołać SetProcessDPIAware i użyć następującego kodu:
Pełne szczegóły poniżej:
Dowiedziałem się, że dzieje się tak, ponieważ system Windows zgłasza przeskalowaną rozdzielczość. Wygląda na to, że python jest domyślnie aplikacją „obsługującą systemową rozdzielczość dpi”. Typy aplikacji obsługujących DPI są wymienione tutaj: http://msdn.microsoft.com/en-us/library/windows/desktop/dn469266%28v=vs.85%29.aspx#dpi_and_the_desktop_scaling_factor
Zasadniczo zamiast wyświetlać zawartość w pełnej rozdzielczości monitora, co spowodowałoby zmniejszenie czcionek, zawartość jest skalowana w górę, aż czcionki będą wystarczająco duże.
Na moim monitorze otrzymuję:
Rozdzielczość fizyczna: 2560 x 1440 (220 DPI)
Zgłaszana rozdzielczość w języku Python: 1555 x 875 (158 DPI)
W tej witrynie systemu Windows: http://msdn.microsoft.com/en-us/library/aa770067%28v=vs.85%29.aspx Wzór na raportowaną efektywną rozdzielczość systemu to: (raportowany_px * bieżący_dpi) / (96 dpi ) = Physical_px
Jestem w stanie uzyskać poprawną rozdzielczość pełnego ekranu i bieżące DPI za pomocą poniższego kodu. Zauważ, że wywołuję SetProcessDPIAware (), aby umożliwić programowi zobaczenie rzeczywistej rozdzielczości.
Który wrócił:
Używam systemu Windows 8.1 z monitorem obsługującym rozdzielczość 220 DPI. Moje skalowanie ekranu ustawia moje obecne DPI na 158.
Użyję 158, aby upewnić się, że moje wykresy w matplotlib mają odpowiedni rozmiar: z pylab import rcParams rcParams ['figure.dpi'] = curr_dpi
źródło
Tkinter
to, że używa prawidłowych pikseli, ale nie jest świadomy skalowania dpi, dlatego podaje nieprawidłowe rozmiary mm.ctypes.windll.shcore.SetProcessDpiAwareness(2)
zwraca błądOSError: [WinError 126] The specified module could not be found
.A dla kompletności Mac OS X
poda listę krotek zawierających wszystkie rozmiary ekranu (jeśli obecnych jest wiele monitorów)
źródło
Jeśli używasz
Qt
zestawu narzędzi w szczególnościPySide
, możesz wykonać następujące czynności:źródło
Używając Linuksa, najprostszym sposobem jest wykonanie polecenia bash
i analizuje jego wyjście używając regexp.
Możesz to również zrobić przez PyGame: http://www.daniweb.com/forums/thread54881.html
źródło
Oto krótki mały program w Pythonie, który wyświetli informacje o konfiguracji wielu monitorów:
Oto przykład jego wyniku:
źródło
gtk.Window()
dostajegdk_default_root_window
? Czy dlatego jesteś pewien, że.get_screen
zawiera wszystkie monitory?gtk.Window()
tworzy nowe okno (patrz tutaj ). Okno to tylko sposóbget_screen
na uzyskanie informacji o monitorze. Zwraca ekran, na którym okno jest włączone (lub byłoby, gdyby zostało kiedykolwiek wyświetlone). Myślę, że to zależy od konfiguracji X, czy ten "ekran" zawiera wszystkie "monitory". Działa w moim systemie z Twinview.Używam metody get_screen_resolution w jednym z moich projektów, takim jak ten poniżej, który jest w zasadzie łańcuchem importu. Możesz to zmodyfikować zgodnie ze swoimi potrzebami, usuwając te części, które nie są potrzebne i przesuń bardziej prawdopodobne porty w górę łańcucha.
źródło
Stare pytanie, ale go brakuje. Jestem nowy w Pythonie, więc proszę powiedz mi, czy to „złe” rozwiązanie. To rozwiązanie jest obsługiwane tylko w systemach Windows i MacOS i działa tylko na ekranie głównym - ale system operacyjny nie jest wspomniany w pytaniu.
Zmierz rozmiar, wykonując zrzut ekranu. Ponieważ rozmiar ekranu nie powinien się zmieniać, należy to zrobić tylko raz. Są bardziej eleganckie rozwiązania, jeśli masz zainstalowany zestaw narzędzi GUI, taki jak GTK, wx, ...
patrz Poduszka
źródło
Wersja XWindows:
źródło
Rozwijanie odpowiedzi @ user2366975 , aby uzyskać aktualny rozmiar ekranu w konfiguracji wieloekranowej przy użyciu Tkinter (kod w Pythonie 2/3):
(Powinien działać na wielu platformach, testowany tylko w systemie Linux)
źródło
Wypróbuj następujący kod:
źródło
Jeśli masz zainstalowane PyQt4, wypróbuj następujący kod:
W przypadku PyQt5 będą działać następujące elementy:
źródło
Wieloplatformowym i łatwym sposobem na to jest użycie TKintera, który jest dostarczany z prawie wszystkimi wersjami Pythona, więc nie musisz niczego instalować:
źródło
Używanie Linuksa Zamiast regexp weź pierwszą linię i wyjmij aktualne wartości rozdzielczości.
Aktualna rozdzielczość wyświetlania: 0
Zrobiono to na xrandr 1.3.5, nie wiem, czy wyjście jest inne w innych wersjach, ale powinno to ułatwić zrozumienie.
źródło
Aby uzyskać liczbę bitów na piksel:
parametry w gdi32:
źródło
Wypróbuj pyautogui:
źródło
Inna wersja wykorzystująca
xrandr
:źródło
Korzystanie z pygame :
[1]
Jeśli jednak próbujesz ustawić okno na rozmiar ekranu, możesz po prostu zrobić:
aby ustawić wyświetlacz w trybie pełnoekranowym. [2]
źródło
Możesz użyć PyMouse . Aby uzyskać rozmiar ekranu, użyj
screen_size()
atrybutu:a
zwróci krotkę,(X, Y)
gdzieX
jest pozycją poziomą aY
pozycją pionową.Link do funkcji w dokumentacji.
źródło
Jeśli pracujesz w systemie operacyjnym Windows, możesz użyć modułu OS, aby go uzyskać:
Zwróci krotkę (Y, X), gdzie Y to rozmiar w pionie, a X to rozmiar w poziomie. Ten kod działa w Pythonie 2 i Pythonie 3
źródło
W Linuksie możemy skorzystać z modułu subprocess
źródło
Jest to trochę kłopotliwe dla ekranu siatkówki, używam tkintera, aby uzyskać fałszywy rozmiar, używam chwytaka pigułki, aby uzyskać rzeczywisty rozmiar:
źródło
W przypadku późniejszych wersji PyGtk:
źródło
W przypadku Linuksa możesz użyć tego:
źródło
Skrypt narzędziowy korzystający z
pynput
biblioteki. Publikuję tutaj dla ref .:źródło