Прошло некоторое время с тех пор, как я играл с python, но я думаю, что кое-что собрал. он использует PyObjC. PyObjC устанавливается с самыми последними версиями ОС, но вам может потребоваться установить его самостоятельно, если вы отстаете от нескольких версий. По сути, этот сценарий вызывает метод setDesktopImageURL:forScreen:options:error:
NSWorkspace с параметром NSImageScaleProportionallyUpOrDown
и устанавливает темно-серую заливку в качестве границы.
Я не знаю, как лучше всего получить imagePath
— извините, мой python заржавел, и я использовал жестко закодированное значение для тестирования — но это должен быть путь к файлу POSIX.
from AppKit import NSWorkspace
from AppKit import NSScreen
from AppKit import NSColor
from AppKit import NSWorkspaceDesktopImageScalingKey
from AppKit import NSWorkspaceDesktopImageFillColorKey
from AppKit import NSImageScaleProportionallyUpOrDown
from Foundation import NSURL
from Foundation import NSDictionary
imageURL = NSURL.fileURLWithPath_(imagePath);
sharedSpace = NSWorkspace.sharedWorkspace();
mainScreen = NSScreen.mainScreen();
fillColor = NSColor.darkGrayColor();
optDict = NSDictionary.dictionaryWithObjects_forKeys_([NSImageScaleProportionallyUpOrDown, fillColor], [NSWorkspaceDesktopImageScalingKey,NSWorkspaceDesktopImageFillColorKey]);
sharedSpace.setDesktopImageURL_forScreen_options_error_(imageURL, mainScreen, optDict, None);
Доступные параметры масштабирования:
- NSImageScaleNone (не изменять размер изображения)
- NSImageScaleAxesIndependly (заполняет экран, растягивая по мере необходимости)
- NSImageScaleProportionallyUpOrDown (подогнать экран по одной оси, сохраняя соотношение сторон)
См. NSScreen, если вам нужно установить обои на дополнительные мониторы, и NSColor, если вы хотите заполнить другим цветом (должен быть одним из предопределенные цвета или пользовательский цвет с использованием RGB).
Если у вас возникли трудности с выполнением этой работы или особые проблемы (например, вам нужно это для доставки на компьютеры, на которых может не быть установлен PyObjC), эти же вызовы NSWorkspace можно написать на AppleScript, а затем AppleScript можно запустить из python с помощью osascript
. Дайте мне знать, что это предпочтительное решение.
person
Ted Wrigley
schedule
29.01.2021