Отключение/включение объекта меню приложения

В попытке изучить самые основные принципы обработки меню. Строка меню моего тестового приложения имеет 3 меню - а именно, "TestApp", "Файл" и "Справка". Я нахожу, что могу удалить эти меню полностью, просто вызовом скажите:

NSMenu* rootMenu = [NSApp mainMenu];
[rootMenu removeItemAtIndex:2];

Однако я только когда-либо хотел бы временно отключить их (отобразите их серым). Существует ли одинаково простой способ сделать это?

8
задан Bender 18 January 2010 в 06:09
поделиться

1 ответ

Можете ли вы кормить «sudo» на подпроцесс? Смотрите это так нить .

@Jon Hadley, от переводчика:

>>> import subprocess
>>> p = subprocess.call(['sudo','/usr/bin/env'])
PASSWORD:
[snip]

USER=root
USERNAME=root
SUDO_COMMAND=/usr/bin/env
SUDO_USER=telliott99
SUDO_UID=501
SUDO_GID=20

из терминала на OS X я должен сделать sudo, когда я запускаю скрипт:

$ sudo python test.py

, то это (в Test.py) дает тот же выход, что и раньше:

import subprocess
p = subprocess.Popen('/usr/bin/env')

Получение подпроцесса напрямую обрабатывать аутентификацию из сценария, вероятно, не очень хорошая идея, поскольку она скрывает эскалацию привилегии. Но вы могли бы посмотреть PEXPECT и это так Ответ .

-121--3090725-

Я могу быть недоразумением вашего вопроса, но похоже, что вы хотите, чтобы вы могли быть в состоянии седиться на фактические названия меню, которые появляются с строкой меню системы (например, серые « Файл «Меню). Я не уверен, что это даже возможно, но это, безусловно, идет против Руководящих принципов человеческого интерфейса :

Название меню отображается недоумение Даже если все команды меню являются Недоступно (затемнение) одновременно. Пользователи всегда должны иметь возможность просматривать Меню содержимое, будь то они или нет в настоящее время доступны.

Итак, реальное решение этой проблемы состоит в том, чтобы иметь возможность серые все элементы меню в определенном меню, когда ваше приложение находится в определенном состоянии. Для этого реализует протокол NsuserInterFaceValidations . Требуется только реализация - (Bool) ValidateUserInterFaceItem: метод. Как правило, при реализации этого метода вы просто проверяете селектор элемента пользовательского интерфейса, который проверяется, и верните да, если оно должно быть включено или нет, если он не должен (который будет серым пункт меню).

7
ответ дан 5 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: