Быстрое развитие GUI для командной строки
Я ищу программное обеспечение, которое помогло бы мне быстро построить GUI (например. HTML-страница.) При выборе другой опции из GUI (например. HTML forms), эти параметры будут волшебно превращаются в параметры командной строки. Например: мой GUI позволит мне выбрать:
- выберите входное имя файла: inputfn
- выберите выходное имя файла: outputfn
- установите Option1 в положение ON
- установите Option2 в OFF
- установить Option3 в значение '42'
- ...
при нажатии на "Отправить" этот пользовательский ввод превратится во что-то вроде:
$ cmd_line --input $inputfn --output $outputfn --option1-on --option2-off --option3=42
Я предполагаю, что мне нужно будет написать простой XML (YAML?) конфигурационный файл, описывающий простую компоновку и спецификацию командной строки (переключатель, текстовые поля ...).
Я сплю или есть что-то подобное ?
1 ответов
этот пост кажется, попросите почти точно, что вы хотите.
верхнее решение использования яд кажется, покрывает ваши реквизиты.
например, следующий один лайнер:
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")"
создает диалоговое окно, содержащее:
- текстовые поля
- выпадающий список выбора
- чекбоксы
- кнопки
это выглядит например:
выход все положено на Yad stdout и echo "$data"
выглядит примерно так:
Application|Name|Generic name|This is the comment|/usr/bin/yad|yad|FALSE|TRUE|
теперь вы можете "разобрать" вывод с помощью некоторого инструмента cmdline, такого как cut
или awk
:
a="$(echo "$data" | cut -d"|" -f1)"
b="$(echo "$data" | cut -d"|" -f1)"
тогда вам остается только логика приложения.
Ubuntu установить:
sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install yad
EDIT: фокусировка на преобразовании GUI в параметры командной строки
после получения downvote, I думаю, я неправильно истолковал ответ. Ключевым моментом, который он хочет, является преобразование из интерфейса GUI в cmdline options.
Я не знаю существующего решения, и поскольку после 7 дней щедрости все еще нет ответа, мы можем предположить, что нет существующего решения.
поэтому лучшее, что мы можем сделать, это помочь OP создать решение самостоятельно. Я считаю, что, поскольку вариантов командной строки не так много, достаточно маленький скрипт будет достаточный.
вот пример 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()
для запуска на Ubuntu 12.04 сначала сделать:
sudo apt-get install python-tk
скриншоты:
команда, сгенерированная для скриншота:
cmd_line --text="asdf" -s qwer /path/to/file
поведение:
- , если значение
--text=
пусто, то он опущен - переключатели отображаются, только если установлен соответствующий флажок
если вы хотите реализуйте новую функцию поверх этого кода, я рекомендую вам сделать это здесь. Если он станет достаточно хорошим, давайте разделимся на новое РЕПО и сделаем его pip устанавливаемым.