jca*_*219 107
在Windows中,您还可以使用ctypes GetSystemMetrics():
import ctypes
user32 = ctypes.windll.user32
screensize = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)
Run Code Online (Sandbox Code Playgroud)
这样你就不需要安装pywin32包了; 它不需要Python本身没有的任何东西.
对于多显示器设置,您可以检索虚拟显示器的组合宽度和高度:
import ctypes
user32 = ctypes.windll.user32
screensize = user32.GetSystemMetrics(78), user32.GetSystemMetrics(79)
Run Code Online (Sandbox Code Playgroud)
rr-*_*rr- 76
我出于这个原因创建了一个PyPI模块:
pip install screeninfo
Run Code Online (Sandbox Code Playgroud)
代码:
from screeninfo import get_monitors
for m in get_monitors():
print(str(m))
Run Code Online (Sandbox Code Playgroud)
结果:
monitor(1920x1080+1920+0)
monitor(1920x1080+0+0)
Run Code Online (Sandbox Code Playgroud)
它支持多监视器环境.它的目标是跨平台; 目前它支持Cygwin和X11,但拉取请求是完全受欢迎的.
Rob*_*bus 58
在Windows上:
from win32api import GetSystemMetrics
print("Width =", GetSystemMetrics(0))
print("Height =", GetSystemMetrics(1))
Run Code Online (Sandbox Code Playgroud)
如果您正在使用高分辨率屏幕,请确保您的python解释器是HIGHDPIAWARE.
基于这篇文章.
Ned*_*der 44
如果你正在使用wxWindows,你可以简单地做:
import wx
app = wx.App(False) # the wx.App object must be created first.
print(wx.GetDisplaySize()) # returns a tuple
Run Code Online (Sandbox Code Playgroud)
use*_*975 40
直接来自这篇文章的答案:如何获得Tkinter的屏幕尺寸?
import tkinter as tk
root = tk.Tk()
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
Run Code Online (Sandbox Code Playgroud)
spa*_*her 23
在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)]
Run Code Online (Sandbox Code Playgroud)
详细信息如下:
我发现这是因为Windows正在报告缩放分辨率.看来python默认是'system dpi aware'应用程序.此处列出了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)
报告的python分辨率: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))
Run Code Online (Sandbox Code Playgroud)
返回的是:
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
Run Code Online (Sandbox Code Playgroud)
我正在运行带有220 DPI显示器的Windows 8.1.我的显示缩放将当前的DPI设置为158.
我将使用158来确保我的matplotlib图是正确的大小:来自pylab import rcParams rcParams ['figure.dpi'] = curr_dpi
cob*_*bal 18
为了完整起见,Mac OS X.
import AppKit
[(screen.frame().size.width, screen.frame().size.height)
for screen in AppKit.NSScreen.screens()]
Run Code Online (Sandbox Code Playgroud)
将为您提供包含所有屏幕大小的元组列表(如果存在多个监视器)
Mad*_*Air 14
如果您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()
Run Code Online (Sandbox Code Playgroud)
小智 14
一种跨平台且简单的方法是使用几乎所有 python 版本附带的 TKinter,因此您无需安装任何东西:
import tkinter
root = tkinter.Tk()
root.withdraw()
WIDTH, HEIGHT = root.winfo_screenwidth(), root.winfo_screenheight()
Run Code Online (Sandbox Code Playgroud)
Pav*_*hov 12
使用Linux,最简单的方法是执行bash命令
xrandr | grep '*'
Run Code Online (Sandbox Code Playgroud)
并使用regexp解析其输出.
你也可以通过PyGame来实现:http://www.daniweb.com/forums/thread54881.html
sta*_*fry 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)
Run Code Online (Sandbox Code Playgroud)
以下是其输出的示例:
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)
Run Code Online (Sandbox Code Playgroud)
nor*_*ok2 11
扩展@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
Run Code Online (Sandbox Code Playgroud)
(应该跨平台工作,仅在 Linux 上测试)
我在我的一个项目中使用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)
Run Code Online (Sandbox Code Playgroud)
小智 7
老问题,但这是缺少的.我是python的新手所以请告诉我这是否是一个"坏"的解决方案.这个解决方案仅支持windows和mac,它只适用于主屏幕 - 但问题中没有提到操作系统.
通过截图来衡量大小.由于屏幕尺寸不应该改变,因此必须只进行一次.如果你有一个像gtk,wx,...安装的gui工具包,那么有更优雅的解决方案.
看枕头
pip install Pillow
Run Code Online (Sandbox Code Playgroud)
from PIL import ImageGrab
img = ImageGrab.grab()
print (img.size)
Run Code Online (Sandbox Code Playgroud)
小智 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)
Run Code Online (Sandbox Code Playgroud)
如果您安装了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))
Run Code Online (Sandbox Code Playgroud)
对于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))
Run Code Online (Sandbox Code Playgroud)
小智 5
请尝试以下代码:
import subprocess
resuls = subprocess.Popen(['xrandr'],stdout=subprocess.PIPE).communicate()[0].split("current")[1].split(",")[0]
width = resuls.split("x")[0].strip()
heigth = resuls.split("x")[1].strip()
print width + "x" + heigth
Run Code Online (Sandbox Code Playgroud)
小智 5
尝试 pyautogui:
import pyautogui
resolution = pyautogui.size()
print(resolution)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
133386 次 |
| 最近记录: |