Python에서 모니터 해상도를 얻으려면 어떻게해야합니까?


126

모니터 해상도를 얻는 가장 간단한 방법은 무엇입니까 (가급적 튜플에서)?


특정 UI 툴킷을 사용하고 있습니까? (예 : GTK, wxPython, Tkinter 등)
detly

11
Tkinter모듈, 당신은 그것을 할 수있는 이 방법 . 표준 Python 라이브러리의 일부이며 대부분의 Unix 및 Windows 플랫폼에서 작동합니다.
martineau

1
일반적인 UI를위한 다양한 기법을 통해 좋은 개요는에 주어진 링크
ImportanceOfBeingErnest

답변:


75

Windows의 경우 :

from win32api import GetSystemMetrics

print("Width =", GetSystemMetrics(0))
print("Height =", GetSystemMetrics(1))

고해상도 화면으로 작업하는 경우 Python 인터프리터가 HIGHDPIAWARE인지 확인하십시오.

게시물을 기반으로 합니다 .


9
다중 완벽한 솔루션의 경우,이 참조 대답
두식 Reshamwala

1
여러 대의 모니터를 사용하는 경우 기본 디스플레이의 크기 만 반환됩니다.
Stevoisiak

1
파이썬 인터프리터를 어떻게 설정 highdpiaware합니까? 이것은 답변에 포함하는 데 유용합니다.
eric

121

Windows에서는 다음과 함께 ctypes를 사용할 수도 있습니다 GetSystemMetrics().

import ctypes
user32 = ctypes.windll.user32
screensize = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)

따라서 pywin32 패키지를 설치할 필요가 없습니다. Python 자체와 함께 제공되지 않는 것은 필요하지 않습니다.

다중 모니터 설정의 경우 가상 모니터의 결합 된 너비와 높이를 검색 할 수 있습니다.

import ctypes
user32 = ctypes.windll.user32
screensize = user32.GetSystemMetrics(78), user32.GetSystemMetrics(79)

11
중요 참고 사항 : DPI 스케일링이 사용되는 경우 (예 : 4k 디스플레이의 경우 자주 발생) 반환 된 값이 올바르지 않을 수 있습니다. GUI 구성 요소를 초기화하기 전에 (GetSystemMetrics 함수를 호출하기 전에가 아니라) SetProcessDPIAware를 호출해야합니다. 이것은 win32 플랫폼의 대부분의 답변 (GTK 등)에 해당됩니다.
totaam 2014 년

1
여러 모니터의 경우 GetSystemMetrics (78) 및 GetSystemMetrics (79)
Derek

@Derek 무엇을 GetSystemMetrics(78)하고 GetSystemMetrics(79)반환합니까?
Stevoisiak

@StevenVascellaro 가상 화면의 너비 / 높이 (픽셀 단위)입니다. msdn.microsoft.com/en-us/library/windows/desktop/…
Derek

94

이런 이유로 PyPI 모듈 을 만들었습니다 .

pip install screeninfo

코드:

from screeninfo import get_monitors
for m in get_monitors():
    print(str(m))

결과:

monitor(1920x1080+1920+0)
monitor(1920x1080+0+0)

다중 모니터 환경을 지원합니다 . 목표는 크로스 플랫폼이되는 것입니다. 지금은 Cygwin과 X11을 지원하지만 풀 요청은 전적으로 환영합니다.


2
ImportError를 : 다음과 같은 오류가 윈도우하지만 맥 I에 좋은 작품 X11로드 할 수 없습니다
크리스 루시

5
Ubuntu에서 잘 작동합니다. Ubuntu 16.04에서 테스트되었습니다.
Dhruv Reshamwala 2016 년

3
참고로 Windows DPI 배율은 계속 적용됩니다. 이 줄은 Windows에 "import ctypes; user32 = ctypes.windll.user32; user32.SetProcessDPIAware ()"와 같은 원시, 비 스케일 해상도를 원한다는 것을 알려줍니다. 1) 귀하의 답변은 상단이어야합니다. 잘 했어. 2) 내 의견은 라이브러리 별 (예 : screeninfo)이 아닌 Windows 전용입니다. 3) KobeJohn의 의견에서 코드를 리핑하고 테스트했습니다. stackoverflow.com/a/32541666/2616321
Jason2616321

6
핸디 모듈 (+1). 나는 (예 : 요구 사항 몇 가지를 설치했다 pip install cython pyobjus내가 OSX 생각에 그것을 사용하기 전에)
조지 Profenza

45

wxWindows를 사용하는 경우 다음을 수행 할 수 있습니다.

import wx

app = wx.App(False) # the wx.App object must be created first.    
print(wx.GetDisplaySize())  # returns a tuple

이게 최고야 ... wx가없는 사람? :) 대신 몇 줄의 코드가 눈에 보입니다. 이것은 이제 나의 기본 방법입니다. 감사합니다.
m3nda

1
이해야한다 app = wx.App(False), 그렇지 않으면 당신이 얻을 "는 wx.App 개체를 먼저 작성해야합니다." 오류. 26 표인데 아무도 확인하지 않았나요? wx 인스턴스를 변수로 지정하지 않고 Windows에서 작동합니까?
m3nda

2
누가 wx가 없습니까? 많은 사람?
marsh

43

이 게시물에 대한 답변에서 직접 발췌 : Tkinter에서 화면 크기를 얻는 방법?

import tkinter as tk

root = tk.Tk()

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

8
기본 디스플레이 옆으로 확장 된 외부 디스플레이가있는 경우이 방법은 현재 디스플레이 해상도가 아닌 모든 디스플레이 해상도의 합계를 제공합니다.
jadelord jul.

다중 화면 단계는 내 대답을 참조하십시오 .
norok2

29

Windows 8.1에서 ctypes 또는 tk에서 올바른 해상도를 얻지 못합니다. 다른 사람들이 ctypes에 대해 동일한 문제를 겪고 있습니다 . getsystemmetrics가 잘못된 화면 크기반환합니다 . Windows 8.1에서 높은 DPI 모니터의 올바른 전체 해상도를 얻으려면 SetProcessDPIAware를 호출하고 다음 코드를 사용해야합니다.

import ctypes
user32 = ctypes.windll.user32
user32.SetProcessDPIAware()
[w, h] = [user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)]

아래 전체 세부 정보 :

윈도우가 스케일 된 해상도를보고하기 때문이라는 것을 알았습니다. 파이썬은 기본적으로 '시스템 dpi 인식'응용 프로그램 인 것으로 보입니다. DPI 인식 응용 프로그램의 유형은 다음과 같습니다. http://msdn.microsoft.com/en-us/library/windows/desktop/dn469266%28v=vs.85%29.aspx#dpi_and_the_desktop_scaling_factor

기본적으로 콘텐츠를 전체 모니터 해상도로 표시하여 글꼴을 작게 만드는 대신 글꼴이 충분히 커질 때까지 콘텐츠가 확대됩니다.

내 모니터에서 다음을 얻습니다.
물리적 해상도 : 2560 x 1440 (220 DPI)
보고 된 파이썬 해상도 : 1555 x 875 (158 DPI)

이 Windows 사이트별로 : http://msdn.microsoft.com/en-us/library/aa770067%28v=vs.85%29.aspx 보고 된 시스템 유효 해상도의 공식은 다음과 같습니다. (reported_px * current_dpi) / (96 dpi ) = physical_px

아래 코드를 사용하여 올바른 전체 화면 해상도와 현재 DPI를 얻을 수 있습니다. 프로그램이 실제 해상도를 볼 수 있도록 SetProcessDPIAware ()를 호출합니다.

import tkinter as tk
root = tk.Tk()

width_px = root.winfo_screenwidth()
height_px = root.winfo_screenheight() 
width_mm = root.winfo_screenmmwidth()
height_mm = root.winfo_screenmmheight() 
# 2.54 cm = in
width_in = width_mm / 25.4
height_in = height_mm / 25.4
width_dpi = width_px/width_in
height_dpi = height_px/height_in 

print('Width: %i px, Height: %i px' % (width_px, height_px))
print('Width: %i mm, Height: %i mm' % (width_mm, height_mm))
print('Width: %f in, Height: %f in' % (width_in, height_in))
print('Width: %f dpi, Height: %f dpi' % (width_dpi, height_dpi))

import ctypes
user32 = ctypes.windll.user32
user32.SetProcessDPIAware()
[w, h] = [user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)]
print('Size is %f %f' % (w, h))

curr_dpi = w*96/width_px
print('Current DPI is %f' % (curr_dpi))    

반환 :

Width: 1555 px, Height: 875 px
Width: 411 mm, Height: 232 mm
Width: 16.181102 in, Height: 9.133858 in
Width: 96.099757 dpi, Height: 95.797414 dpi
Size is 2560.000000 1440.000000
Current DPI is 158.045016

220 DPI 지원 모니터로 Windows 8.1을 실행하고 있습니다. 내 디스플레이 배율은 현재 DPI를 158로 설정합니다.

158을 사용하여 matplotlib 플롯이 올바른 크기인지 확인합니다. from pylab import rcParams rcParams [ 'figure.dpi'] = curr_dpi


여기에는 좋은 정보가 많이 있지만 대답 자체가 중간에 묻혀 있습니다. 좀 더 쉽게 읽을 수 있도록 답이 무엇인지 정확히 설명 하고 배경 정보 제공 할 수 있습니까?
skrrgwasme 2014 년

처음에 답변을 표시하도록 게시물을 편집 한 다음 세부 정보를 얻었습니다. 피드백 감사드립니다.
spacether

1
여기에서 계산에 결함이있는 것 같습니다.보고 된 너비와 높이 (인치)에서 대각선 크기를 계산하면 쉽게 찾을 수 있습니다. 대각선 13.3 인치의 내 화면은 15 인치로보고되었습니다. Tkinter올바른 픽셀을 사용하는 것 같지만 dpi 배율을 인식하지 못하여 잘못된 mm 크기를보고합니다.
Primer

이것은 Windows 10에서 작동하지 않으며 SetSystemDPIAware ()가 차이를 만들지 않는 것 같습니다. 그러나 ctypes.windll.shcore.SetProcessDpiAwareness (2)를 대신 호출하면 트릭을 수행하는 것 같습니다.
Klamer Schutte 17. 9.

@KlamerSchutte : ctypes.windll.shcore.SetProcessDpiAwareness(2)오류를 반환합니다 OSError: [WinError 126] The specified module could not be found.
아드리안 엉덩이를 괴롭히는

21

완전성을 위해 Mac OS X

import AppKit
[(screen.frame().size.width, screen.frame().size.height)
    for screen in AppKit.NSScreen.screens()]

모든 화면 크기를 포함하는 튜플 목록을 제공합니다 (여러 모니터가있는 경우).


15

Qt특별히 툴킷을 사용하는 PySide경우 다음을 수행 할 수 있습니다.

from PySide import QtGui
import sys

app = QtGui.QApplication(sys.argv)
screen_rect = app.desktop().screenGeometry()
width, height = screen_rect.width(), screen_rect.height()


11

다음은 다중 모니터 설정에 대한 정보를 표시하는 간단한 Python 프로그램입니다.

import gtk

window = gtk.Window()

# the screen contains all monitors
screen = window.get_screen()
print "screen size: %d x %d" % (gtk.gdk.screen_width(),gtk.gdk.screen_height())

# collect data about each monitor
monitors = []
nmons = screen.get_n_monitors()
print "there are %d monitors" % nmons
for m in range(nmons):
  mg = screen.get_monitor_geometry(m)
  print "monitor %d: %d x %d" % (m,mg.width,mg.height)
  monitors.append(mg)

# current monitor
curmon = screen.get_monitor_at_window(screen.get_active_window())
x, y, width, height = monitors[curmon]
print "monitor %d: %d x %d (current)" % (curmon,width,height)  

다음은 출력의 예입니다.

screen size: 5120 x 1200
there are 3 monitors
monitor 0: 1600 x 1200
monitor 1: 1920 x 1200
monitor 2: 1600 x 1200
monitor 1: 1920 x 1200 (current)

않습니다 gtk.Window()를 얻을 gdk_default_root_window? 그게 .get_screen모든 모니터를 포함 한다고 확신 합니까?
yatg

내 코드에서 나는 코드를 복제하려고 시도하기 때문에 jsctypes에서 수행하고 있으며 0 모니터를 계속 알려줍니다. gist.github.com/yajd/55441c9c3d0711ee4a38#file-gistfile1-txt-L3
yatg

2
코드를 작성한 지 오래되었지만 올바르게 기억 gtk.Window()하면 새 창을 만드는 것입니다 ( 여기 참조 ). 창 get_screen은 모니터 정보를 얻는 데 사용하는 방법 일뿐 입니다. 창이 켜져있는 (또는 표시된 적이있는 경우) 화면을 반환합니다. "화면"에 모든 "모니터"가 포함되어 있는지 여부는 X 구성에 따라 달라집니다. Twinview를 사용하는 내 시스템에서 수행됩니다.
starfry

감사합니다 @starfry! 화면에 관계없이 모든 모니터와 크기를 얻을 수있는 교차 솔루션을 찾아야했습니다. 그런 것을 개발할 수있는 기회가 있었습니까? :)
yatg

이후 툴킷 버전의 대안 :```python
satyagraha

9

아래 프로젝트 중 하나에서 기본적으로 가져 오기 체인 인 get_screen_resolution 메서드를 사용하고 있습니다. 필요하지 않은 부분을 제거하고 체인에서 더 가능성이 높은 포트를 위로 이동하여 필요에 따라이를 수정할 수 있습니다.

PYTHON_V3 = sys.version_info >= (3,0,0) and sys.version_info < (4,0,0):
#[...]
    def get_screen_resolution(self, measurement="px"):
        """
        Tries to detect the screen resolution from the system.
        @param measurement: The measurement to describe the screen resolution in. Can be either 'px', 'inch' or 'mm'. 
        @return: (screen_width,screen_height) where screen_width and screen_height are int types according to measurement.
        """
        mm_per_inch = 25.4
        px_per_inch =  72.0 #most common
        try: # Platforms supported by GTK3, Fx Linux/BSD
            from gi.repository import Gdk 
            screen = Gdk.Screen.get_default()
            if measurement=="px":
                width = screen.get_width()
                height = screen.get_height()
            elif measurement=="inch":
                width = screen.get_width_mm()/mm_per_inch
                height = screen.get_height_mm()/mm_per_inch
            elif measurement=="mm":
                width = screen.get_width_mm()
                height = screen.get_height_mm()
            else:
                raise NotImplementedError("Handling %s is not implemented." % measurement)
            return (width,height)
        except:
            try: #Probably the most OS independent way
                if PYTHON_V3: 
                    import tkinter 
                else:
                    import Tkinter as tkinter
                root = tkinter.Tk()
                if measurement=="px":
                    width = root.winfo_screenwidth()
                    height = root.winfo_screenheight()
                elif measurement=="inch":
                    width = root.winfo_screenmmwidth()/mm_per_inch
                    height = root.winfo_screenmmheight()/mm_per_inch
                elif measurement=="mm":
                    width = root.winfo_screenmmwidth()
                    height = root.winfo_screenmmheight()
                else:
                    raise NotImplementedError("Handling %s is not implemented." % measurement)
                return (width,height)
            except:
                try: #Windows only
                    from win32api import GetSystemMetrics 
                    width_px = GetSystemMetrics (0)
                    height_px = GetSystemMetrics (1)
                    if measurement=="px":
                        return (width_px,height_px)
                    elif measurement=="inch":
                        return (width_px/px_per_inch,height_px/px_per_inch)
                    elif measurement=="mm":
                        return (width_px/mm_per_inch,height_px/mm_per_inch)
                    else:
                        raise NotImplementedError("Handling %s is not implemented." % measurement)
                except:
                    try: # Windows only
                        import ctypes
                        user32 = ctypes.windll.user32
                        width_px = user32.GetSystemMetrics(0)
                        height_px = user32.GetSystemMetrics(1)
                        if measurement=="px":
                            return (width_px,height_px)
                        elif measurement=="inch":
                            return (width_px/px_per_inch,height_px/px_per_inch)
                        elif measurement=="mm":
                            return (width_px/mm_per_inch,height_px/mm_per_inch)
                        else:
                            raise NotImplementedError("Handling %s is not implemented." % measurement)
                    except:
                        try: # Mac OS X only
                            import AppKit 
                            for screen in AppKit.NSScreen.screens():
                                width_px = screen.frame().size.width
                                height_px = screen.frame().size.height
                                if measurement=="px":
                                    return (width_px,height_px)
                                elif measurement=="inch":
                                    return (width_px/px_per_inch,height_px/px_per_inch)
                                elif measurement=="mm":
                                    return (width_px/mm_per_inch,height_px/mm_per_inch)
                                else:
                                    raise NotImplementedError("Handling %s is not implemented." % measurement)
                        except: 
                            try: # Linux/Unix
                                import Xlib.display
                                resolution = Xlib.display.Display().screen().root.get_geometry()
                                width_px = resolution.width
                                height_px = resolution.height
                                if measurement=="px":
                                    return (width_px,height_px)
                                elif measurement=="inch":
                                    return (width_px/px_per_inch,height_px/px_per_inch)
                                elif measurement=="mm":
                                    return (width_px/mm_per_inch,height_px/mm_per_inch)
                                else:
                                    raise NotImplementedError("Handling %s is not implemented." % measurement)
                            except:
                                try: # Linux/Unix
                                    if not self.is_in_path("xrandr"):
                                        raise ImportError("Cannot read the output of xrandr, if any.")
                                    else:
                                        args = ["xrandr", "-q", "-d", ":0"]
                                        proc = subprocess.Popen(args,stdout=subprocess.PIPE)
                                        for line in iter(proc.stdout.readline,''):
                                            if isinstance(line, bytes):
                                                line = line.decode("utf-8")
                                            if "Screen" in line:
                                                width_px = int(line.split()[7])
                                                height_px = int(line.split()[9][:-1])
                                                if measurement=="px":
                                                    return (width_px,height_px)
                                                elif measurement=="inch":
                                                    return (width_px/px_per_inch,height_px/px_per_inch)
                                                elif measurement=="mm":
                                                    return (width_px/mm_per_inch,height_px/mm_per_inch)
                                                else:
                                                    raise NotImplementedError("Handling %s is not implemented." % measurement)
                                except:
                                    # Failover
                                    screensize = 1366, 768
                                    sys.stderr.write("WARNING: Failed to detect screen size. Falling back to %sx%s" % screensize)
                                    if measurement=="px":
                                        return screensize
                                    elif measurement=="inch":
                                        return (screensize[0]/px_per_inch,screensize[1]/px_per_inch)
                                    elif measurement=="mm":
                                        return (screensize[0]/mm_per_inch,screensize[1]/mm_per_inch)
                                    else:
                                        raise NotImplementedError("Handling %s is not implemented." % measurement)

1
이 공유를 주셔서 감사합니다,하지만 경우-다른 경우를 처리하는 함수를 사용하여 많이 단축 될 수 있었다
Udayraj Deshmukh을

8

오래된 질문이지만 이것은 누락되었습니다. 저는 파이썬을 처음 접했기 때문에 이것이 "나쁜"해결책인지 알려주세요. 이 솔루션은 Windows 및 MacOS에서만 지원되며 기본 화면에서만 작동하지만 OS는 질문에 언급되어 있지 않습니다.

스크린 샷을 찍어 크기를 측정합니다. 화면 크기가 변경되지 않아야하므로 한 번만 수행하면됩니다. GTK, wx, ...와 같은 GUI 툴킷이 설치되어 있다면 더 우아한 솔루션이 있습니다.

베개 참조

pip install Pillow

from PIL import ImageGrab

img = ImageGrab.grab()
print (img.size)

6

XWindows 버전 :

#!/usr/bin/python

import Xlib
import Xlib.display

resolution = Xlib.display.Display().screen().root.get_geometry()
print str(resolution.width) + "x" + str(resolution.height)

6

@ user2366975 의 답변을 확장 하여 Tkinter (Python 2/3 코드)를 사용하여 다중 화면 설정에서 현재 화면 크기를 가져옵니다.

try:
    # for Python 3
    import tkinter as tk
except ImportError:
    # for Python 2
    import Tkinter as tk


def get_curr_screen_geometry():
    """
    Workaround to get the size of the current screen in a multi-screen setup.

    Returns:
        geometry (str): The standard Tk geometry string.
            [width]x[height]+[left]+[top]
    """
    root = tk.Tk()
    root.update_idletasks()
    root.attributes('-fullscreen', True)
    root.state('iconic')
    geometry = root.winfo_geometry()
    root.destroy()
    return geometry

(크로스 플랫폼에서 작동해야하며 Linux에서만 테스트)



5

PyQt4가 설치된 경우 다음 코드를 시도하십시오.

from PyQt4 import QtGui
import sys

MyApp = QtGui.QApplication(sys.argv)
V = MyApp.desktop().screenGeometry()
h = V.height()
w = V.width()
print("The screen resolution (width X height) is the following:")
print(str(w) + "X" + str(h))

PyQt5의 경우 다음이 작동합니다.

from PyQt5 import QtWidgets
import sys

MyApp = QtWidgets.QApplication(sys.argv)
V = MyApp.desktop().screenGeometry()
h = V.height()
w = V.width()
print("The screen resolution (width X height) is the following:")
print(str(w) + "X" + str(h))

5

크로스 플랫폼과이를위한 쉬운 방법은 거의 모든 파이썬 버전과 함께 제공되는 TKinter를 사용하는 것이므로 아무것도 설치할 필요가 없습니다.

import tkinter
root = tkinter.Tk()
root.withdraw()
WIDTH, HEIGHT = root.winfo_screenwidth(), root.winfo_screenheight()

3

정규식 대신 Linux 사용 첫 번째 줄을 사용하고 현재 해상도 값을 가져옵니다.

디스플레이의 현재 해상도 : 0

>>> screen = os.popen("xrandr -q -d :0").readlines()[0]
>>> print screen
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 1920 x 1920
>>> width = screen.split()[7]
>>> print width
1920
>>> height = screen.split()[9][:-1]
>>> print height
1080
>>> print "Current resolution is %s x %s" % (width,height)
Current resolution is 1920 x 1080

이것은 xrandr 1.3.5에서 수행되었습니다. 다른 버전에서는 출력이 다른지 모르겠지만 쉽게 알아낼 수 있습니다.


슬프게도 다중 모니터 설정에는 좋지 않습니다. 파이썬의 잘못은 아니지만 이것을 사용하면 예상치 못한 결과가 발생할 수 있습니다 ...
black_puppydog

2

픽셀 당 비트를 얻으려면 :

import ctypes
user32 = ctypes.windll.user32
gdi32 = ctypes.windll.gdi32

screensize = (user32.GetSystemMetrics(0), user32.GetSystemMetrics(1))
print "screensize =%s"%(str(screensize))
dc = user32.GetDC(None);

screensize = (gdi32.GetDeviceCaps(dc,8), gdi32.GetDeviceCaps(dc,10), gdi32.GetDeviceCaps(dc,12))
print "screensize =%s"%(str(screensize))
screensize = (gdi32.GetDeviceCaps(dc,118), gdi32.GetDeviceCaps(dc,117), gdi32.GetDeviceCaps(dc,12))
print "screensize =%s"%(str(screensize))

gdi32의 매개 변수 :

#/// Vertical height of entire desktop in pixels
#DESKTOPVERTRES = 117,
#/// Horizontal width of entire desktop in pixels
#DESKTOPHORZRES = 118,
#/// Horizontal width in pixels
#HORZRES = 8,
#/// Vertical height in pixels
#VERTRES = 10,
#/// Number of bits per pixel
#BITSPIXEL = 12,

2

pyautogui 시도 :

import pyautogui
resolution = pyautogui.size()
print(resolution) 

이 코드가 작동해야하는 이유에 대한 설명을 추가해야합니다. 코드 자체에 주석을 추가 할 수도 있습니다. 현재 형식에서는 해결하기 위해 수행 한 작업을 나머지 커뮤니티가 이해하는 데 도움이되는 설명을 제공하지 않습니다. /질문에 답하세요. 그러나 이것은 아주 오래된 질문은 또한 - 수락 된 답을 ...
ishmaelMakitla

2

다음을 사용하는 다른 버전 xrandr:

import re
from subprocess import run, PIPE

output = run(['xrandr'], stdout=PIPE).stdout.decode()
result = re.search(r'current (\d+) x (\d+)', output)
width, height = map(int, result.groups()) if result else (800, 600)

2

파이 게임 사용 :

import pygame
pygame.init()
infos = pygame.display.Info()
screen_size = (infos.current_w, infos.current_h)

[1]

그러나 창을 화면 크기로 설정하려는 경우 다음을 수행 할 수 있습니다.

pygame.display.set_mode((0,0),pygame.FULLSCREEN)

디스플레이를 전체 화면 모드로 설정합니다. [2]


Windows에서 작동하는지 확인했습니다. :) 비 Windows 특정 방법이 얼마나 멋진가요!
Lukasz Czerwinski

1

PyMouse를 사용할 수 있습니다 . 화면 크기를 얻으려면 screen_size()속성을 사용하십시오 .

from pymouse import PyMouse
m = PyMouse()
a = m.screen_size()

a튜플을 반환합니다 (X, Y). 여기서는 X수평 위치 이고은 Y수직 위치입니다.

문서의 기능에 대한 링크.


1

Windows OS에서 작업하는 경우 OS 모듈을 사용하여 얻을 수 있습니다.

import os
cmd = 'wmic desktopmonitor get screenheight, screenwidth'
size_tuple = tuple(map(int,os.popen(cmd).read().split()[-2::]))

또한 튜플 반환 (Y, X) Y는 세로 크기이고, X는 수평 크기이다. 이 코드는 Python 2 및 Python 3에서 작동합니다.


0

Linux에서는 하위 프로세스 모듈을 사용할 수 있습니다.

import subprocess
cmd = ['xrandr']
cmd2 = ['grep', '*']
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
p2 = subprocess.Popen(cmd2, stdin=p.stdout, stdout=subprocess.PIPE)
p.stdout.close()

resolution_string, junk = p2.communicate()
resolution = resolution_string.split()[0]
resolution = resolution.decode("utf-8") 
width = int(resolution.split("x")[0].strip())
heigth = int(resolution.split("x")[1].strip())

0

망막 화면에는 약간 귀찮습니다. tkinter를 사용하여 가짜 크기를 얻고 필로우 그랩을 사용하여 실제 크기를 얻습니다.

import tkinter
root = tkinter.Tk()
resolution_width = root.winfo_screenwidth()
resolution_height = root.winfo_screenheight()
image = ImageGrab.grab()
real_width, real_height = image.width, image.height
ratio_width = real_width / resolution_width
ratio_height = real_height/ resolution_height

0

이후 버전의 PyGtk :

import gi
gi.require_version("Gdk", "3.0")
from gi.repository import Gdk

display = Gdk.Display.get_default()
n_monitors = display.get_n_monitors()
print("there are %d monitors" % n_monitors)
for m in range(n_monitors):
  monitor = display.get_monitor(m)
  geometry = monitor.get_geometry()
  print("monitor %d: %d x %d" % (m, geometry.width, geometry.height))

0

Linux의 경우 다음을 사용할 수 있습니다.

import gi
gi.require_version("Gdk", "3.0")
from gi.repository import Gdk

s = Gdk.Screen.get_default()
screen_width = s.get_width()
screen_height = s.get_height()
print(screen_width)
print(screen_height)

0

pynput라이브러리를 사용하는 유틸리티 스크립트 . 심판을 위해 여기에 게시. :

 
from pynput.mouse import Controller as MouseController

def get_screen_size():
    """Utility function to get screen resolution"""

    mouse = MouseController()

    width = height = 0

    def _reset_mouse_position():
        # Move the mouse to the top left of 
        # the screen
        mouse.position = (0, 0)

    # Reset mouse position
    _reset_mouse_position()

    count = 0
    while 1:
        count += 1
        mouse.move(count, 0)
        
        # Get the current position of the mouse
        left = mouse.position[0]

        # If the left doesn't change anymore, then
        # that's the screen resolution's width
        if width == left:
            # Add the last pixel
            width += 1

            # Reset count for use for height
            count = 0
            break

        # On each iteration, assign the left to 
        # the width
        width = left
    
    # Reset mouse position
    _reset_mouse_position()

    while 1:
        count += 1
        mouse.move(0, count)

        # Get the current position of the mouse
        right = mouse.position[1]

        # If the right doesn't change anymore, then
        # that's the screen resolution's height
        if height == right:
            # Add the last pixel
            height += 1
            break

        # On each iteration, assign the right to 
        # the height
        height = right

    return width, height

>>> get_screen_size()
(1920, 1080)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.