essayer d'écrire une application Python qui télécharge des images à partir d'un flux RSS et fait un fond composite. Comment obtenir la résolution de bureau actuelle sur Mac OS X (Leopard?) P>
4 Réponses :
Comme d'habitude, l'utilisation de fonctionnalités liées à un système d'exploitation est une très mauvaise idée. Il y a une centaine de libs portables dans Python qui vous donnent accès à ces informations. Le premier qui vient à mon esprit est bien sûr pygame:
from win32api import GetSystemMetrics width = GetSystemMetrics [0] height = GetSystemMetrics [1]
L'exemple Pygame n'était pas utile pour moi car vous obtenez la résolution de l'écran PYGAME, pas votre écran physique. Je ne connais pas très bien le pygame alors laissez-moi savoir si j'ai raté quelque chose.
Votre code a pris mon écran dans une fenêtre de jeu basse résolution sans aucune capacité de sortie. J'ai été forcé de redémarrer mon Mac! Votre concept est correct - nous avons besoin d'un code portable, mais la solution est mauvaise car pygame.init () ouvre une fenêtre de jeu dont nous n'avons pas besoin.
avec pyobjc quelque chose comme ça devrait fonctionner. Pyobjc est livré avec léopard. Avec cela, vous pouvez également saisir la largeur et la hauteur. P> print("Current screen resolution: %dx%d" % (NSScreen.mainScreen().frame().size.width, NSScreen.mainScreen().frame().size.height))
Ouais, Pyobjc est tout à fait quelque chose. Et c'est sur chaque Mac depuis le léopard. Et rappelez-vous quand en utilisant réellement cela, de nombreux utilisateurs de Mac ont plus d'un écran. Donc, cela compte pour cela en cas de besoin. Voir Docs d'Apple sur Nscreen pour plus d'informations.
Si vous le faites à partir d'un script de LaundAgent, vous devrez peut-être chuter vers les primitives de basegraphics plutôt que sur des méthodes de niveau AppKit. Travailler à ce sujet aujourd'hui, mon script LaunkAgent-chargé obtient Aucun code> de
Nscreen.mainscreen () code>, mais fonctionne bien si je le charge d'un terminal de ma session.
from Quartz import CGDisplayBounds
from Quartz import CGMainDisplayID
def screen_size():
mainMonitor = CGDisplayBounds(CGMainDisplayID())
return (mainMonitor.size.width, mainMonitor.size.height)
Cela a fonctionné pour moi, une fois que QUARTZ a été installé avec PIP INSTALL PIP PYOBJC-FRACK-QUARTZ code>
J'avais du mal à trouver une de ces tâches pour travailler alors j'ai regardé autour de moi et j'ai mis quelque chose ensemble qui semble fonctionner. Je suis un peu nouveau au codage, veuillez donc excuser les erreurs. Si vous avez des pensées, veuillez commenter.
Cela ne fonctionne pas pour moi, System_Profiler SPDisplaySDaTaType code> sortira la résolution maximale de mon écran, pas la résolution actuelle.
C'est parce que vous utilisez des fonctionnalités Windows pour faire des choses au lieu de la plate-forme transversale lib. Vous vous bloquez dans un piège. Pour la manipulation d'image, utilisez PIL.
Alan: Vérifiez ceci: développeur.apple.com/graphicsiming/pythonandquartz.html