Dieser Beitrag scheint fast genau das zu fragen, was Sie wollen.
Die beste Lösung für die Verwendung von YAD scheint Ihre Anforderungen zu erfüllen.
Zum Beispiel der folgende Einzeiler:
data="$(yad --title="Desktop entry editor" --text="Simple desktop entry editor" --form --field="Type:CB" --field="Name" --field="Generic name" --field="Comment" --field="Command:FL" --field="Icon" --field="In terminal:CHK" --field="Startup notify:CHK" "Application" "Name" "Generic name" "This is the comment" "/usr/bin/yad" "yad" FALSE TRUE --button="WebUpd8:2" --button="gtk-ok:0" --button="gtk-cancel:1")"
erstellt einen Dialog mit:
- Textfelder
- Dropdown-Auswahlmöglichkeiten
- Kontrollkästchen
- Schaltflächen
das sieht so aus:
Die Ausgabe erfolgt vollständig auf yad stdout und echo "$data"
sieht in etwa so aus:
Application|Name|Generic name|This is the comment|/usr/bin/yad|yad|FALSE|TRUE|
Jetzt können Sie die Ausgabe mit einem cmdline-Tool wie cut
"parsen". oder awk
:
a="$(echo "$data" | cut -d"|" -f1)"
b="$(echo "$data" | cut -d"|" -f1)"
Dann bleibt Ihnen nur noch Anwendungslogik.
Ubuntu-Installation:
sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install yad
BEARBEITEN:Fokussierung auf die Umwandlung von GUI- in Befehlszeilenoptionen
Nachdem ich eine Ablehnung erhalten habe, glaube ich, dass ich die Antwort falsch interpretiert habe. Der wichtigste Punkt, den er möchte, ist die Konvertierung von der GUI zur Schnittstelle für cmdline-Optionen.
Mir ist keine existierende Lösung bekannt, und da nach 7 Prämientagen immer noch keine Antwort kommt, können wir davon ausgehen, dass es keine existierende Lösung gibt.
Daher ist das Beste, was wir tun können, dem OP zu helfen, selbst eine Lösung zu erstellen. Da es nicht so viele Fälle von Befehlszeilenoptionen gibt, glaube ich, dass ein relativ kleines Skript ausreichen wird.
Hier ist ein Python + Tk-Beispiel
#!/usr/bin/env python
import Tkinter
import tkFileDialog
class Option(object):
def __init__(self, optype, name, widget=Tkinter.Entry):
self.optype = optype
self.name = name
if self.optype == 'switch':
self.widget = Tkinter.Checkbutton
else:
self.widget = widget
## INPUT -------------------------------------------------------
options = [
Option("key-value", "--text="),
Option("switch", "-s"),
Option("positional", "pos0"),
Option("positional", "pos1", tkFileDialog.askopenfilename),
]
## END -------------------------------------------------------
def askopenfilename(filename):
filename.set(tkFileDialog.askopenfilename())
# Build command
def ok_func():
cmd = "cmd_line"
for option in options:
if option.optype == "key-value":
val = tkvars[option.name].get()
if val:
cmd += ' '
cmd += '%s"%s"' % (option.name, val)
elif option.optype == "switch":
cmd += ' '
if tkvars[option.name].get() == 1:
cmd += option.name
elif option.optype == "positional":
val = tkvars[option.name].get()
if val:
cmd += ' '
cmd += val
print cmd
tkvars = {}
app = Tkinter.Tk()
grid = Tkinter.Frame()
row = 0
# Build GUI
for option in options:
Tkinter.Label(grid, text=option.name).grid(row=row, column=0, sticky='W')
if option.widget == Tkinter.Entry:
tkvars[option.name] = Tkinter.StringVar()
widget = Tkinter.Entry(
grid,
textvariable=tkvars[option.name]
)
elif option.widget == Tkinter.Checkbutton:
tkvars[option.name] = Tkinter.IntVar()
widget = Tkinter.Checkbutton(
grid,
variable = tkvars[option.name],
onvalue = 1
)
elif option.widget == tkFileDialog.askopenfilename:
tkvars[option.name] = Tkinter.StringVar()
widget = Tkinter.Button(
grid,
text='Browse',
command=lambda: askopenfilename(tkvars[option.name])
)
widget.grid(row=row, column=1, sticky='W')
row += 1
grid.pack()
Tkinter.Button(app, text="ok", command=ok_func).pack()
Tkinter.Button(app, text="quit", command=app.quit).pack()
app.mainloop()
Um unter Ubuntu 12.04 ausgeführt zu werden, tun Sie zuerst:
sudo apt-get install python-tk
Screenshot:
Für den Screenshot generierter Befehl:
cmd_line --text="asdf" -s qwer /path/to/file
Verhalten:
- wenn der Wert von
--text=
leer ist, wird es weggelassen - Schalter erscheinen nur, wenn das entsprechende Kontrollkästchen aktiviert ist
Wenn Sie eine neue Funktion zusätzlich zu diesem Code implementieren möchten, empfehle ich Ihnen, dies hier zu tun. Wenn es gut genug wird, teilen Sie es in ein neues Repo auf und machen Sie es per Pip installierbar.