Изменить фоновое изображение macOS с помощью параметра адаптации к экрану в python

Я хочу изменить свои обои с помощью python на macOs. Используя этот код:

from appscript import app, mactypes
app('Finder').desktop_picture.set(mactypes.File(file_loc))

который отлично работает, за исключением того, что он всегда сбрасывает параметр от настройки до экрана до центра. Я не могу найти ничего о том, как добавить параметр настройки экрана. Спасибо за вашу помощь.


person Leowrin    schedule 28.01.2021    source источник
comment
1. Используйте Системные события.приложение. 2. Я тоже не вижу ничего в SE Desktop Suite для настройки положения, так что вы, вероятно, SOOL.   -  person foo    schedule 28.01.2021


Ответы (1)


Прошло некоторое время с тех пор, как я играл с 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