Pos ini sepertinya menanyakan apa yang Anda inginkan.
Solusi teratas menggunakan YAD tampaknya mencakup kebutuhan Anda.
Misalnya satu liner berikut:
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")"
membuat dialog yang berisi:
- bidang teks
- pilihan tarik-turun
- kotak centang
- tombol
yang terlihat seperti:
Outputnya semua diletakkan di yad stdout dan echo "$data"
terlihat seperti:
Application|Name|Generic name|This is the comment|/usr/bin/yad|yad|FALSE|TRUE|
Sekarang Anda dapat "mengurai" output dengan beberapa alat cmdline seperti cut
atau awk
:
a="$(echo "$data" | cut -d"|" -f1)"
b="$(echo "$data" | cut -d"|" -f1)"
Maka hanya ada logika aplikasi yang tersisa untuk Anda.
Instalasi Ubuntu:
sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install yad
EDIT:berfokus pada konversi GUI ke opsi baris perintah
Setelah menerima downvote, saya pikir saya salah menafsirkan jawaban. Poin kunci yang dia inginkan adalah konversi dari GUI ke antarmuka opsi cmdline.
Saya tidak mengetahui solusi yang ada, dan karena setelah 7 hari pemberian masih belum ada jawaban, kami dapat berasumsi bahwa tidak ada solusi yang ada.
Oleh karena itu, hal terbaik yang dapat kami lakukan adalah membantu OP membuat solusi sendiri. Saya yakin karena tidak banyak kasus opsi baris perintah, skrip yang cukup kecil sudah cukup.
Ini dia contoh 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()
Untuk berjalan di Ubuntu 12.04 pertama lakukan:
sudo apt-get install python-tk
Tangkapan layar:
Perintah yang dihasilkan untuk tangkapan layar:
cmd_line --text="asdf" -s qwer /path/to/file
Perilaku:
- jika nilai
--text=
kosong maka dihilangkan - sakelar hanya muncul jika kotak yang sesuai dicentang
Jika Anda ingin menerapkan fitur baru di atas kode itu, saya sarankan Anda melakukannya di sini. Jika sudah cukup baik, mari pisahkan ke repo baru dan buat pip dapat diinstal.