我想写一个Python应用程序,从RSS源下载图像,并制作复合背景。如何在Mac OS X(Leopard)上获取当前桌面分辨率?
使用 Pyobjc 应该可以像这样工作。Pyobjc 随 Leopard 一起提供。
from AppKit import NSScreen
print(NSScreen.mainScreen().frame())
有了它,你还可以获取宽度和高度。
NSScreen.mainScreen().frame().size.width
NSScreen.mainScreen().frame().size.height
例如:print("Current screen resolution: %dx%d" % (NSScreen.mainScreen().frame().size.width, NSScreen.mainScreen().frame().size.height))
如果您正在使用LaunchAgent脚本执行此操作,则可能需要使用核心图形原语而不是AppKit级别的方法。今天我在处理此问题时,从我的LaunchAgent加载的脚本中使用NSScreen.mainScreen()
返回None
,但如果我从会话的终端中加载它,则可以正常工作。
from Quartz import CGDisplayBounds
from Quartz import CGMainDisplayID
def screen_size():
mainMonitor = CGDisplayBounds(CGMainDisplayID())
return (mainMonitor.size.width, mainMonitor.size.height)
pip install pyobjc-framework-Quartz
安装了Quartz。 - Touten我曾经在让这些工作上遇到了困难,所以我四处寻找了一些信息并整合出了一些看起来可行的方案。由于我不太熟悉编码,如果有任何错误之处,请多多包涵。如果您有任何想法,请在评论区留言。
results = str(subprocess.Popen(['system_profiler SPDisplaysDataType'],stdout=subprocess.PIPE, shell=True).communicate()[0])
res = re.search('Resolution: \d* x \d*', results).group(0).split(' ')
width, height = res[1], res[3]
return width, height
system_profiler SPDisplaysDataType
输出的是我的屏幕的最大分辨率,而不是当前分辨率。 - Touten通常情况下,使用绑定到操作系统的功能是一个非常糟糕的想法。在Python中有数百个可移植库可以让您访问这些信息。我首先想到的是pygame:
import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((640,480), FULLSCREEN)
x, y = screen.get_size()
from win32api import GetSystemMetrics
width = GetSystemMetrics [0]
height = GetSystemMetrics [1]
虽然这种方式更加简单,但是在Mac、Linux、BSD、Solaris以及未来的Windows版本中可能无法使用。