Gibt es eine Möglichkeit, ein Dialogfeld vom Typ Benutzerbestätigung (wie Sind Sie sicher - Ja / Nein) zu erhalten, wenn ich ein Skript ausführe (durch Doppelklick)? Ich meine nicht in Terminal, sondern eine grafische Bestätigungsbox, so etwas wie diese:
(Ich weiß, dass das Image von Windows stammt, ich konnte kein Linux finden)
if zenity...
oderzenity... || exit
Sie können
xmessage
im Skript selbst verwenden. Setzen Sie so etwas nach dem "shebang":xmessage "Are you sure?"
Daraufhin wird eine grafische Meldung mit der Aufschrift "Sind Sie sicher?" Angezeigt. mit einem "okay" Knopf.
Sie können
xmessage
mehr als eine Schaltfläche konfigurieren und die darin enthaltenen Informationen ändern. Sie können auch die Aktionen konfigurieren, die von jeder Schaltfläche ausgeführt werden.Zum Beispiel,
Sehen Sie
man xmessage
für alle Optionen (es gibt viele von ihnen).quelle
Anstatt Ihnen zu sagen, wie es geht, werde ich Ihnen sagen, dass Sie das nicht tun sollten.
TL; DR - Ändern Sie Ihr Skript nicht. Konfigurieren Sie stattdessen Ihren Dateimanager oder finden Sie heraus, warum Ihre Benutzer ihn versehentlich ausführen.
BEARBEITEN: Sie scheinen Ihr Skript als etwas Besonderes zu behandeln, als ob die allgemeinen Einstellungen nicht gut genug wären und Ihr Skript eine spezielle Bestätigung des Benutzers benötigt. Ein Doppelklick darauf ist die Bestätigung. Wenn Sie feststellen, dass Ihre Benutzer es versehentlich ausführen, müssen Sie herausfinden, warum sie es tun, und das stattdessen lösen. Dann besteht Ihr eigentliches Problem nicht darin , eine Bestätigung zu verlangen, sondern zu verhindern, dass Ihre Benutzer sie versehentlich ausführen.
Aus der Art und Weise, wie Sie Ihr Problem aufdecken, geht hervor, dass Sie erwarten, dass Ihr Programm (Skript) ausgeführt wird, indem Sie zu dem Speicherort der Datei navigieren und dann im Dateimanager darauf klicken. Denken Sie an alle anderen Programme in Ihrem System. Wie viele fängst du so an? Navigieren Sie zu,
/usr/local/bin
wenn Sie Firefox starten? Natürlich nicht. Sie klicken im Anwendungsmenü darauf. (Gnome Tweak ist ein Python-Skript, vielleicht ist das ein besseres Beispiel)Hoffentlich werden Sie das Klicken im Anwendungsmenü nicht als Unfall betrachten. Ihr Problem besteht also darin, wie Sie Ihr Skript dort anzeigen lassen, anstatt den Dateimanager zu verwenden. Dazu tun Sie Folgendes:
Platzieren Sie Ihr Skript nicht in der Nähe der anderen Dateien, in denen der Benutzer möglicherweise versehentlich darauf klickt (der typische Ort ist
/usr/local/bin/
eine systemweite Installation oder~/.local/bin/
eine Benutzerinstallation).Erstellen Sie eine Desktop-Eintragsdatei (lesen Sie die Standardspezifikationen ). Hier ist ein minimaler Fall:
und schiebe es in
/usr/local/share/applications/your-script.xml
oder~/.local/share/your-script.xml
.Zum Schluss laufen
update-desktop-database
.Da Sie auf das Skript doppelklicken, ist es Aufgabe Ihres Dateimanagers, dies zu bestätigen. Es ist nicht die Aufgabe des Skripts, zu bestätigen, ob es ausgeführt werden soll. Nehmen Sie das bis zum Äußersten. Können Sie sich vorstellen, wie lächerlich es wäre, wenn Sie jedes Mal, wenn Sie ein Programm aufrufen, dies bestätigen müssten?
Das einzige Mal, wenn ein Programm um Bestätigung bitten sollte, ist, wenn es etwas möglicherweise Gefährliches und Irreversibles tun will. Zum Beispiel das Überschreiben einer Datei oder das Umgehen des Papierkorbs. Beachten Sie auch, dass es in diesen Beispielen darum geht, ein Programm dazu zu bringen, etwas Bestimmtes zu tun. Es geht nicht darum, solche Programme zu starten. Wenn ein Programm nur dazu dient, so gefährliche Dinge zu tun, sollte es auch keine Bestätigung verlangen.
In der Tat werden Sie von Nautilus (Gnome-Dateimanager) bereits standardmäßig aufgefordert, zu bestätigen, ob Sie ein Skript ausführen möchten (oder es einfach in einem Texteditor öffnen möchten).
Und natürlich ist dieses Verhalten konfigurierbar, sodass der Benutzer es deaktivieren kann (Notizeintrag in ausführbaren Textdateien ).
Fügen Sie Ihrem Skript also keinen nervigen Bestätigungsdialog hinzu. Konfigurieren Sie Ihren Dateimanager richtig. Und lassen Sie Ihre Benutzer dasselbe tun.
quelle
Sie können yad verwenden, was wie Zenity bei Steroiden ist, da es weitaus konfigurierbarer ist. Sie können es vom Software Center in Ubuntu installieren. In seiner einfachsten Form können Sie eingeben
yad --title=Question --image=dialog-question --text="Are you sure?"
und du solltest das sehen:
Wenn OK gedrückt wurde, erhalten wir einen Rückkehrcode von 0, wenn Abbrechen gedrückt wurde, erhalten wir einen Rückkehrcode von 1.
Es ist besser, das Feld in der Mitte zu platzieren und auch die Breite anzupassen. Verwenden Sie eine führende Registerkarte, um den Text "Sind Sie sicher?" Zu positionieren. mehr nach rechts und auch immer oben. Dafür brauchen wir:
yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200
Die meisten Schalter sind selbsterklärend, mit Ausnahme des "\ t" vor dem "Sind Sie sicher?" Dadurch wird einfach ein Tabulator hinzugefügt, bevor der Text gedruckt wird. Jetzt sollten wir das sehen:
Die Box ist zentriert, immer oben und sieht besser aus. Verwenden Sie Folgendes, um eine Variable festzulegen, um zu testen, für welche Taste gedrückt wurde:
yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200;result=$?;echo $result
In diesem Beispiel verwenden wir die Variable $ result, die auf 0 gesetzt wird, wenn OK gedrückt wurde, oder auf 1, wenn Abbrechen gedrückt wurde.
Für Hilfe bei yad können Sie verwenden
man yad
oderyad --help-all
ich fand praktische Beispiele einfacher anzupassen. Es gibt einige hier . yad ist meiner Meinung nach viel konfigurierbarer und daher benutzerfreundlicher als Zenity.quelle