2009-08-15 14 views
8

Provare a scrivere un'applicazione python che scarica immagini da un feed RSS e crea uno sfondo composito. Come posso ottenere l'attuale risoluzione del desktop su Mac OS X (leopardo?)Come ottenere la risoluzione del desktop in Mac tramite Python?

+2

è perché si utilizzano le funzionalità di Windows per fare cose invece di lib multipiattaforma. Ti stai chiudendo in una trappola. Per la manipolazione delle immagini, utilizzare PIL. –

+0

Alan: controlla questo: http://developer.apple.com/graphicsimaging/pythonandquartz.html –

risposta

12

Con Pyobjc qualcosa del genere dovrebbe funzionare. Pyobjc viene con Leopard.

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

Con questo, si può anche afferrare la larghezza e l'altezza.

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

Ad esempio:

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

Sì, pyobjc è piuttosto qualcosa. Ed è su ogni mac fin da Leopard. E ricorda che quando usi effettivamente questo numero di utenti Mac hanno più di uno schermo. Quindi spiegalo quando è necessario. Vedi i documenti di Apple su NSScreen per maggiori informazioni. –

3

Come al solito, l'utilizzo di funzionalità collegate a un sistema operativo è una pessima idea. Esistono centinaia di librerie portatili in Python che ti danno accesso a tali informazioni. Il primo che mi viene in mente è ovviamente Pygame:

import pygame 
from pygame.locals import * 

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

ma credo che il cacao fare altrettanto buono, e per questo wxPython o Qt è tuo amico. Suppongo che su Windows che hai fatto qualcosa di simile:

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

Certo è più facile, ma non funziona su Mac, Linux, BSD, Solaris, e probabilmente non molto più tardi versione per Windows.

6

Se si sta facendo questo da uno script LaunchAgent, potrebbe essere necessario scendere fino a CoreGraphics primitive piuttosto che metodi AppKit livello. Lavorando su questo oggi, il mio script caricato da LaunchAgent ottiene None indietro da NSScreen.mainScreen(), ma funziona bene se lo carico da un terminale nella mia sessione.

from Quartz import CGDisplayBounds 
from Quartz import CGMainDisplayID 

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

ho avuto un momento difficile ottenere tutto questo a lavorare così mi sono guardato intorno e mettere insieme qualcosa che sembra funzionare. Sono un po 'nuovo alla codifica quindi scusate eventuali errori. Se avete qualche pensiero per favore commentate.

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 
Problemi correlati