GNU/Linux >> Linux Esercitazione >  >> Linux

Sviluppa rapidamente la GUI per la riga di comando

Questo post sembra chiedere quasi esattamente cosa vuoi.

La soluzione migliore per utilizzare YAD sembra soddisfare i tuoi requisiti.

Ad esempio la seguente riga:

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

crea una finestra di dialogo contenente:

  • campi di testo
  • selezioni a discesa
  • caselle di controllo
  • pulsanti

che assomiglia a:

L'output è tutto messo su yad stdout e echo "$data" assomiglia a:

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

Ora puoi "analizzare" l'output con alcuni strumenti cmdline come cut o awk :

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

Quindi ti rimane solo la logica dell'applicazione.

Installazione Ubuntu:

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

EDIT:incentrato sulla conversione della GUI in opzioni della riga di comando

Dopo aver ricevuto un voto negativo, penso di aver interpretato la risposta nel modo sbagliato. Il punto chiave che vuole è la conversione dalla GUI all'interfaccia delle opzioni di cmdline.

Non conosco una soluzione esistente e poiché dopo 7 giorni di taglia ancora nessuna risposta, possiamo presumere che non esista una soluzione esistente.

Pertanto, il meglio che possiamo fare è aiutare l'OP a creare una soluzione da solo. Credo che, poiché non ci sono molti casi di opzioni della riga di comando, sarà sufficiente uno script ragionevolmente piccolo.

Ecco un esempio di 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()

Per eseguire su Ubuntu 12.04 eseguire prima:

sudo apt-get install python-tk

Schermata:

Comando generato per lo screenshot:

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

Comportamento:

  • se il valore di --text= è vuoto allora viene omesso
  • le opzioni vengono visualizzate solo se la casella di controllo corrispondente è selezionata

Se vuoi implementare una nuova funzionalità in cima a quel codice, ti consiglio di farlo qui. Se diventa abbastanza buono, dividiamo in un nuovo repository e rendiamolo pip installabile.


Linux
  1. 8 suggerimenti per la riga di comando di Linux

  2. Titan:un gestore di password da riga di comando per Linux

  3. ppl – Una rubrica da riga di comando per Linux

  4. Moro:uno strumento di produttività da riga di comando per il monitoraggio delle ore di lavoro

  5. Specifiche generali per l'interfaccia a riga di comando?

4 applicazioni per prendere appunti da riga di comando per Linux

10 utili trucchi per la riga di comando di Linux per i principianti - Parte 2

20 Esempi di comandi Sed (Stream Editor) per utenti Linux

Tutorial sui comandi Linux Uniq per principianti (10 esempi)

Micro:un editor di testo basato su riga di comando per Linux

Ripgrep – Lo strumento di ricerca da riga di comando più veloce per Linux