Есть ли способ получить диалоговое окно типа User Confirmation (Like Are You Sure-Yes / No) при выполнении скрипта (двойным щелчком мыши)? Я не имею в виду в терминале, но окно с графическим подтверждением, что-то вроде этого:
(я знаю, что изображение из окон, я не мог найти Linux)
Вы можете использовать xmessage в самом скрипте. Поместите что-то подобное после «shebang»:
xmessage "Are you sure?"
На нем появится графическое сообщение с надписью «Вы уверены?». с кнопкой «okay».
Вы можете настроить xmessage на наличие более одной кнопки и изменить то, что написано в ней. Вы также можете настроить действия, выполняемые каждой кнопкой.
Например,
xmessage -buttons ok:0,cancel:1 "Are you sure?"
См. man xmessage для всех параметров (их много).
Вместо того, чтобы рассказывать вам, как это сделать, я расскажу вам, что вы не должны этого делать.
TL; DR - Не изменяйте свой скрипт. Вместо этого настройте свой файловый менеджер или выясните, почему ваши пользователи случайно запускают его.
EDIT: Кажется, вы считаете свой сценарий как-то особенным, как будто общие настройки недостаточно хороши, и ваш скрипт нуждается в специальном подтверждении от Пользователь. Двойной щелчок по нему TL; DR - Не изменяйте свой скрипт. Вместо этого настройте свой файловый менеджер или выясните, почему ваши пользователи случайно запускают его. подтверждение. Если вы обнаружите, что ваши пользователи запускают его случайно, тогда вам нужно выяснить, почему они это делают и решить это. Тогда ваша реальная проблема заключается не в том, как требовать подтверждения, а в том, как предотвратить случайное использование ваших пользователей.
По тому, как вы раскрываете свою проблему, кажется, что вы ожидаете, что ваша программа (сценарий) будет запущена путем навигации где находится файл, а затем щелкнуть по нему из диспетчера файлов. Подумайте обо всех других программах в вашей системе. Как много вы начинаете? Вы переходите к /usr/local/bin при запуске firefox? Конечно, нет. Вы нажимаете на нее в меню приложений. (gnome tweak - скрипт python, может быть, это лучший пример)
Надеюсь, вы не будете нажимать на него из меню приложений случайно. Поэтому ваша проблема заключается в том, как заставить вас запускать скрипт вместо использования диспетчера файлов. Для этого выполните следующие действия:
поместите сценарий из других файлов, где пользователь может случайно щелкнуть по нему (типичное место - /usr/local/bin/ для системной установки или ~/.local/bin/ для установки пользователем), создайте файл записи рабочего стола (прочтите стандартные спецификации). Вот минимальный случай:[Desktop Entry]
Name=Your script name
Exec=path/for/your/script
Icon=path/for/your/icon/can/be/svg
Terminal=false
Type=Application
и засуньте его в /usr/local/share/applications/your-script.xml или ~/.local/share/your-script.xml. Наконец запустите update-desktop-database. Поскольку вы дважды щелкаете по скрипту, это подтверждается его файловым менеджером. Это не значит, что сценарий должен подтвердить, должен ли он работать. Примите это к крайности. Можете ли вы представить себе, насколько смешно было бы, что каждый раз, когда вы вызывали какую-либо программу, которую вы должны были подтвердить?
Единственный момент, когда программа должна запрашивать подтверждение, - это когда она собирается сделать что-то опасное и необратимое , Например, перезапись файла или обход мусора. И обратите внимание, что даже эти примеры связаны с тем, что программа делает что-то конкретное. Они не собираются начинать такие программы. Если целью программы является только такая опасная вещь, то она также не должна запрашивать подтверждение.
Действительно, Nautilus (менеджер файлов Gnome) уже по умолчанию попросит вас подтвердить, хотите ли вы выполнить сценарий (или просто открыть его в текстовом редакторе).
И, конечно, это поведение настраивается, предоставляя пользователю возможность отключить его (запись примечания на not ).
Так что не добавляйте раздражающее диалоговое окно подтверждения в ваш скрипт. Настройте свой файловый менеджер правильно. И пусть ваши пользователи делают то же самое.
Вы можете использовать yad, который похож на zenity на стероиды, поскольку он намного более настраивается. Вы можете установить его из Software Center в Ubuntu. В своей основной форме вы можете ввести
yad --title=Question --image=dialog-question --text="Are you sure?"
, и вы должны увидеть это:
Если было нажато OK, мы получаем код возврата 0 , если был нажат «Отмена», мы получаем код возврата 1.
. Лучше поместить ящик в центр, а также отрегулировать его ширину, используя ведущую вкладку для размещения текста «Вы конечно?" больше вправо, а также всегда на высоте. Для этого нам нужно:
yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200
Большинство переключателей самоочевидны, за исключением «\ t» перед «Вы уверены?». который просто добавляет вкладку перед печатью текста. Теперь мы должны увидеть это:
Ящик центрирован, всегда сверху и выглядит лучше. Чтобы установить переменную для проверки, для которой была нажата кнопка, используйте:
yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200;result=$?;echo $result
В этом примере мы используем переменную $ result, которая будет установлена в 0, если OK нажата или 1, если было нажато «Отмена».
Для помощи с yad вы можете использовать man yad или yad --help-all, но я нашел, что практические примеры легче адаптировать. Здесь есть некоторые. Яд гораздо более настраиваемый и, следовательно, более полезный, чем зенит, по моему мнению.