2009-08-15 27 views
8

Cố gắng viết ứng dụng python tải xuống hình ảnh từ nguồn cấp dữ liệu RSS và tạo nền hỗn hợp. Làm cách nào để tôi nhận được độ phân giải màn hình hiện tại trên Mac OS X (báo?)Làm thế nào để có được độ phân giải máy tính để bàn trong Mac thông qua Python?

+2

đó là vì bạn sử dụng các tính năng của cửa sổ để thực hiện công cụ thay vì lib nền tảng chéo. Bạn đang tự nhốt mình vào một cái bẫy. Đối với thao tác hình ảnh, hãy sử dụng PIL. –

+0

Alan: kiểm tra điều này: http://developer.apple.com/graphicsimaging/pythonandquartz.html –

Trả lời

12

Với Pyobjc một cái gì đó như thế này sẽ hoạt động. Pyobjc đi kèm với Leopard.

from AppKit import NSScreen 
print(NSScreen.mainScreen().frame()) 

Với điều đó, bạn cũng có thể lấy chiều rộng và chiều cao.

NSScreen.mainScreen().frame().size.width 
NSScreen.mainScreen().frame().size.height 

Ví dụ:

print("Current screen resolution: %dx%d" % (NSScreen.mainScreen().frame().size.width, NSScreen.mainScreen().frame().size.height)) 
+0

Vâng, pyobjc là một cái gì đó khá. Và đó là trên mọi mac kể từ Leopard. Và hãy nhớ khi thực sự sử dụng này rất nhiều người dùng mac có nhiều hơn thì một màn hình. Vì vậy, tài khoản cho rằng khi cần thiết. Xem tài liệu của Apple trên NSScreen để biết thêm thông tin. –

3

Như thường lệ, việc sử dụng các tính năng được liên kết với hệ điều hành là một ý tưởng rất tồi. Có hàng trăm thư viện di động trong Python cung cấp cho bạn quyền truy cập vào thông tin đó. Là người đầu tiên mà nói đến cái tâm của tôi là tất nhiên pygame:

import pygame 
from pygame.locals import * 

pygame.init() 
screen = pygame.display.set_mode((640,480), FULLSCREEN) 
x, y = screen.get_size() 

Nhưng tôi đoán cacao làm chỉ là tốt, và do wxPython hoặc qt là bạn của bạn. Tôi cho rằng trên Windows bạn đã làm một cái gì đó như thế này:

from win32api import GetSystemMetrics 
width = GetSystemMetrics [0] 
height = GetSystemMetrics [1] 

Chắc chắn nó dễ dàng hơn, nhưng sẽ không hoạt động trên Mac, Linux, BSD, Solaris, và có lẽ cũng không phải phiên bản cửa sổ sau này.

6

Nếu bạn đang làm điều này từ một kịch bản LaunchAgent, bạn có thể cần phải thả xuống CoreGraphics nguyên thủy chứ không phải là phương pháp AppKit cấp. Làm việc ngày hôm nay, kịch bản lệnh LaunchAgent-load của tôi được None quay lại từ NSScreen.mainScreen(), nhưng hoạt động tốt nếu tôi tải nó từ một thiết bị đầu cuối trong phiên của tôi.

from Quartz import CGDisplayBounds 
from Quartz import CGMainDisplayID 

def screen_size(): 
    mainMonitor = CGDisplayBounds(CGMainDisplayID()) 
    return (mainMonitor.size.width, mainMonitor.size.height) 
1

Tôi gặp khó khăn trong việc thực hiện bất kỳ thao tác nào trong số này để tôi nhìn xung quanh và đặt một thứ gì đó với nhau có vẻ hoạt động. Tôi kinda mới tại mã hóa vì vậy xin vui lòng tha thứ bất kỳ lỗi nào. Nếu bạn có bất kỳ suy nghĩ xin vui lòng bình luận.

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 
Các vấn đề liên quan