我正在寻找一种可以帮助我快速构建GUI的软件(例如HTML页面).当从GUI中选择不同的选项(例如HTML表单)时,这些选项会神奇地变成命令行选项.例如:我的GUI允许我选择:
选择输入文件名:inputfn
选择输出文件名:outputfn
将Option1设置为ON
将Option2设置为OFF
将Option3设置为值'42'
...
点击"提交"时,此用户输入将变为:
$ cmd_line --input $inputfn --output $outputfn --option1-on --option2-off --option3=42
我想我需要编写一个简单的XML(YAML?)配置文件来描述简单的布局和命令行特性(单选按钮,文本字段......).
我在做梦还是有这样的东西?
这篇文章似乎几乎准确地问你想要什么.
使用YAD的最佳解决方案似乎涵盖了您的必需品.
例如以下一个班轮:
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
在收到downvote之后,我想我用错误的方式解释了答案.他想要的关键点是从GUI转换到cmdline选项界面.
我不知道现有的解决方案,因为在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=
空,则省略
如果选中相应的复选框,则仅显示开关
如果您想在该代码之上实现新功能,我建议您在此处执行此操作.如果它变得足够好,让我们拆分成一个新的仓库并使其可以安装.