2009-08-15 1 views
8

Próbujesz napisać aplikację python, która pobiera obrazy z kanału RSS i tworzy tło złożone. Jak uzyskać bieżącą rozdzielczość pulpitu w systemie Mac OS X (leopard?)Jak uzyskać rozdzielczość pulpitu na komputerze Mac poprzez Python?

+2

dzieje się tak, ponieważ zamiast korzystać z funkcji platformy, można używać funkcji systemu Windows. Blokujesz się w pułapkę. Aby manipulować obrazem, użyj PIL. –

+0

Alan: sprawdź to: http://developer.apple.com/graphicsimaging/pythonandquartz.html –

Odpowiedz

12

Z Pyobjc coś takiego powinno zadziałać. Pyobjc jest wyposażony w Leoparda.

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

Dzięki temu można również pobrać szerokość i wysokość.

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

Na przykład:

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

Tak, pyobjc jest całkiem czymś. I jest na każdym macu od Leoparda. I pamiętaj, że kiedy używasz tego, wielu użytkowników mac ma więcej niż jeden ekran. Więc uwzględnij to w razie potrzeby. Zobacz dokumentację Apple na NSScreen, aby uzyskać więcej informacji. –

3

Jak zwykle, używanie funkcji powiązanych z systemem operacyjnym jest bardzo złym pomysłem. W Pythonie znajduje się setek przenośnych bibliotek, które zapewniają dostęp do tych informacji. Pierwszy, który przychodzi mi do głowy to oczywiście pygame:

import pygame 
from pygame.locals import * 

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

Ale myślę, kakao zrobić tak samo dobre, a do nich wxPython lub qt jest twoim przyjacielem. Przypuszczam, że w systemie Windows zrobiłeś coś takiego:

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

pewno jest to łatwiejsze, ale nie będzie działać na Mac, Linux, BSD, Solaris i prawdopodobnie nie bardzo nowszej okna.

6

Jeśli robisz to ze skryptu LaunchAgent, być może trzeba będzie spadać do CoreGraphics prymitywów zamiast metod zestaw klas AppKit szczebla. Pracując nad tym dzisiaj, mój skrypt ładowany przez LaunchAgent otrzymuje None z powrotem z NSScreen.mainScreen(), ale działa dobrze, jeśli załaduję go z terminala w mojej sesji.

from Quartz import CGDisplayBounds 
from Quartz import CGMainDisplayID 

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

Ciężko mi było coś z tego zrobić, więc rozejrzałem się i położyłem coś, co wydaje się działać. Jestem trochę nowy w kodowaniu, więc przepraszam za wszelkie błędy. Jeśli masz jakieś myśli, prosimy o komentarz.

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