Разница между app.activateWithOptions () и app.activateWithOptions_ () - PullRequest
0 голосов
/ 19 июня 2020

Недавно я использую AppKit для написания программы, которая нацелена на автоматический щелчок внутри окна приложения. Когда я хочу сначала активировать окно, я go просматривал документацию NSRunningApplication и обнаружил функцию под названием «activateWithOptions» и написал простую программу, подобную следующей.

Apps = NSWorkspace.sharedWorkspace().runningApplications()
for app in Apps:
    print(app.localizedName())
    app.activateWithOptions(NSApplicationActivateAllWindows)

Вот мои вопросы.

  1. Первый вопрос заключается в том, что в документации атрибут localizedName является переменной, но в Python вы должны использовать его как функцию, чтобы вы могли получить имя. В чем разница?
  2. Если запустить программу, она просто выдаст ошибку в следующем. Но если вы изменили его на app.activateWithOptions_ (NSApplicationActivateAll Windows), код можно будет передать. Почему документация несовместима с моим использованием?

    AttributeError: объект 'NSRunningApplication' не имеет атрибута 'activateWithOptions'

1 Ответ

1 голос
/ 19 июня 2020

Локализованное имя

Это не переменная, это свойство, объявленное как:

@property(readonly, copy) NSString *localizedName;

Оно синтезируется в переменной экземпляра _localizedName и этой функции:

- (NSString *)localizedName {
  return _localizedName;
}

Подчеркивание

PyObj C документация - Подчеркивания и многие из них :

Сообщение Objective- C выглядит так:

[someObject doSomething:arg1 withSomethingElse:arg2];

Селектор (имя сообщения) для приведенного выше фрагмента следующий (обратите внимание на двоеточия):

doSomething:withSomethingElse:

Для обеспечения однозначного перевода без потерь между Objective- C сообщений и методов Python, эквивалент имени метода Python - это просто селектор с двоеточиями, замененными символами подчеркивания. Поскольку каждое двоеточие в селекторе Objective- C является заполнителем для аргумента, количество подчеркиваний в имени метода, измененном PyObj C, является количеством аргументов, которые должны быть предоставлены.

PyObj C перевод указанного выше селектора (обратите внимание на подчеркивания):

doSomething_withSomethingElse_

activateWithOptions: -> activateWithOptions_

...