Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 快速开发命令行图形用户界面_Linux_User Interface_Command Line Arguments - Fatal编程技术网

Linux 快速开发命令行图形用户界面

Linux 快速开发命令行图形用户界面,linux,user-interface,command-line-arguments,Linux,User Interface,Command Line Arguments,我正在寻找一个软件,可以帮助我快速建立图形用户界面(如HTML页面)。当从GUI中选择不同的选项(例如HTML表单)时,这些选项会神奇地变成命令行选项。例如:我的GUI允许我选择: 选择输入文件名:inputfn 选择输出文件名:outputfn 将选项1设置为ON 将选项2设置为OFF 将选项3设置为值“42” 单击“提交”时,此用户输入将变成如下内容: $ cmd_line --input $inputfn --output $outputfn --option1-on --optio

我正在寻找一个软件,可以帮助我快速建立图形用户界面(如HTML页面)。当从GUI中选择不同的选项(例如HTML表单)时,这些选项会神奇地变成命令行选项。例如:我的GUI允许我选择:

  • 选择输入文件名:inputfn
  • 选择输出文件名:outputfn
  • 将选项1设置为ON
  • 将选项2设置为OFF
  • 将选项3设置为值“42”
单击“提交”时,此用户输入将变成如下内容:

$ cmd_line --input $inputfn --output $outputfn --option1-on --option2-off --option3=42
Application|Name|Generic name|This is the comment|/usr/bin/yad|yad|FALSE|TRUE|
我想我需要编写一个简单的XML(YAML?)配置文件,来描述简单的布局和命令行特性(单选按钮、文本字段…)

我是在做梦还是有类似的事情可以做?

似乎在问你到底想要什么

使用的最佳解决方案似乎涵盖了您的必需品

例如,以下一个衬里:

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标准输出上,
echo“$data”
看起来像:

$ cmd_line --input $inputfn --output $outputfn --option1-on --option2-off --option3=42
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
编辑:关注GUI到命令行选项的转换 在获得否决票后,我想我对答案的解释是错误的。他想要的关键点是从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

为屏幕截图生成的命令:

cmd_line --text="asdf" -s qwer /path/to/file
行为:

  • 如果
    --text=
    的值为空,则忽略该值
  • 仅当选中相应的复选框时,才会显示开关
如果您想在代码之上实现一个新特性,我建议您这样做。
如果它足够好的话,让我们拆分成一个新的回购协议,并使它可以通过pip安装。

我想你需要的是。
使用它,您可以指定文件/目录/简单输入、选项等。

gtkdialog
应该能够帮助您使用bash脚本和glade(xml)完成这项工作。查看请为您的操作系统添加标签-我猜是unix/linux?这似乎与我想要的非常接近。仍然需要对应用程序逻辑进行编码,并确保将yad图形工具映射到将要执行的低级命令行工具。请解释,以便我可以改进信息。与我最初要求的相比,yad是低级的。想象一下,必须为-say-djpeg编写一个应用程序。没有简单的方法可以说选项“-outfile”需要filename类型的用户输入。如果我现在想为一个应用程序编码cjpeg…@malat说一个选项需要一个文件名是可能的,那么所有这些样板代码都是复制/粘贴的:在
--field=“Command:FL”
FL
表示它需要一个路径,它在GUI上显示一个打开文件浏览器的按钮。不过,我同意命令行参数的转换可以更自动。@malat请检查编辑是否更接近您想要的。