Ce message semble demander presque exactement ce que vous voulez.
La meilleure solution consistant à utiliser YAD semble couvrir vos besoins.
Par exemple, la doublure suivante :
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")"
crée une boîte de dialogue contenant :
- champs de texte
- sélections déroulantes
- cases à cocher
- boutons
qui ressemble à :
La sortie est entièrement mise sur yad stdout et echo "$data"
ressemble à :
Application|Name|Generic name|This is the comment|/usr/bin/yad|yad|FALSE|TRUE|
Vous pouvez maintenant "analyser" la sortie avec un outil cmdline tel que cut
ou awk
:
a="$(echo "$data" | cut -d"|" -f1)"
b="$(echo "$data" | cut -d"|" -f1)"
Ensuite, il vous reste juste la logique d'application.
Installation d'Ubuntu :
sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install yad
EDIT :se concentrer sur la conversion de l'interface graphique en options de ligne de commande
Après avoir reçu un vote négatif, je pense avoir mal interprété la réponse. Le point clé qu'il souhaite est la conversion de l'interface graphique vers l'interface d'options de la ligne de commande.
Je ne connais pas de solution existante, et comme après 7 jours bounty toujours pas de réponse, on peut supposer qu'il n'y a pas de solution existante.
Par conséquent, le mieux que nous puissions faire est d'aider l'OP à créer lui-même une solution. Je pense que, puisqu'il n'y a pas beaucoup de cas d'options de ligne de commande, un script raisonnablement petit sera suffisant.
Voici un exemple Python + Tk
#!/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()
Pour exécuter sur Ubuntu 12.04, faites d'abord :
sudo apt-get install python-tk
Capture d'écran :
Commande générée pour la capture d'écran :
cmd_line --text="asdf" -s qwer /path/to/file
Comportement :
- si la valeur de
--text=
est vide alors il est omis - les commutateurs n'apparaissent que si la case correspondante est cochée
Si vous souhaitez implémenter une nouvelle fonctionnalité en plus de ce code, je vous recommande de le faire ici. Si cela devient assez bon, séparons-nous en un nouveau dépôt et rendons-le pip installable.