GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Entwickeln Sie schnell eine GUI für die Befehlszeile

Dieser Beitrag scheint fast genau das zu fragen, was Sie wollen.

Die beste Lösung für die Verwendung von YAD scheint Ihre Anforderungen zu erfüllen.

Zum Beispiel der folgende Einzeiler:

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")"

erstellt einen Dialog mit:

  • Textfelder
  • Dropdown-Auswahlmöglichkeiten
  • Kontrollkästchen
  • Schaltflächen

das sieht so aus:

Die Ausgabe erfolgt vollständig auf yad stdout und echo "$data" sieht in etwa so aus:

Application|Name|Generic name|This is the comment|/usr/bin/yad|yad|FALSE|TRUE|

Jetzt können Sie die Ausgabe mit einem cmdline-Tool wie cut "parsen". oder awk :

a="$(echo "$data" | cut -d"|" -f1)"
b="$(echo "$data" | cut -d"|" -f1)"

Dann bleibt Ihnen nur noch Anwendungslogik.

Ubuntu-Installation:

sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install yad

BEARBEITEN:Fokussierung auf die Umwandlung von GUI- in Befehlszeilenoptionen

Nachdem ich eine Ablehnung erhalten habe, glaube ich, dass ich die Antwort falsch interpretiert habe. Der wichtigste Punkt, den er möchte, ist die Konvertierung von der GUI zur Schnittstelle für cmdline-Optionen.

Mir ist keine existierende Lösung bekannt, und da nach 7 Prämientagen immer noch keine Antwort kommt, können wir davon ausgehen, dass es keine existierende Lösung gibt.

Daher ist das Beste, was wir tun können, dem OP zu helfen, selbst eine Lösung zu erstellen. Da es nicht so viele Fälle von Befehlszeilenoptionen gibt, glaube ich, dass ein relativ kleines Skript ausreichen wird.

Hier ist ein Python + Tk-Beispiel

#!/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()

Um unter Ubuntu 12.04 ausgeführt zu werden, tun Sie zuerst:

sudo apt-get install python-tk

Screenshot:

Für den Screenshot generierter Befehl:

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

Verhalten:

  • wenn der Wert von --text= leer ist, wird es weggelassen
  • Schalter erscheinen nur, wenn das entsprechende Kontrollkästchen aktiviert ist

Wenn Sie eine neue Funktion zusätzlich zu diesem Code implementieren möchten, empfehle ich Ihnen, dies hier zu tun. Wenn es gut genug wird, teilen Sie es in ein neues Repo auf und machen Sie es per Pip installierbar.


Linux
  1. 8 Tipps für die Linux-Kommandozeile

  2. Bash-Tipps für den Alltag an der Kommandozeile

  3. Titan – Ein Befehlszeilen-Passwort-Manager für Linux

  4. ppl – Ein Befehlszeilen-Adressbuch für Linux

  5. 8 Linux-virsh-Unterbefehle zum Verwalten von VMs auf der Befehlszeile

4 Befehlszeilen-Notizanwendungen für Linux

10 nützliche Linux-Kommandozeilen-Tricks für Neulinge – Teil 2

20 Sed (Stream Editor)-Befehlsbeispiele für Linux-Benutzer

Linux Uniq Command Tutorial für Anfänger (10 Beispiele)

Micro – Ein befehlszeilenbasierter Texteditor für Linux

Ripgrep – Das schnellste Kommandozeilen-Suchtool für Linux