GNU/Linux >> Belajar Linux >  >> Linux

Kembangkan GUI dengan cepat untuk baris perintah

Pos ini sepertinya menanyakan apa yang Anda inginkan.

Solusi teratas menggunakan YAD tampaknya mencakup kebutuhan Anda.

Misalnya satu liner berikut:

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

membuat dialog yang berisi:

  • bidang teks
  • pilihan tarik-turun
  • kotak centang
  • tombol

yang terlihat seperti:

Outputnya semua diletakkan di yad stdout dan echo "$data" terlihat seperti:

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

Sekarang Anda dapat "mengurai" output dengan beberapa alat cmdline seperti cut atau awk :

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

Maka hanya ada logika aplikasi yang tersisa untuk Anda.

Instalasi Ubuntu:

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

EDIT:berfokus pada konversi GUI ke opsi baris perintah

Setelah menerima downvote, saya pikir saya salah menafsirkan jawaban. Poin kunci yang dia inginkan adalah konversi dari GUI ke antarmuka opsi cmdline.

Saya tidak mengetahui solusi yang ada, dan karena setelah 7 hari pemberian masih belum ada jawaban, kami dapat berasumsi bahwa tidak ada solusi yang ada.

Oleh karena itu, hal terbaik yang dapat kami lakukan adalah membantu OP membuat solusi sendiri. Saya yakin karena tidak banyak kasus opsi baris perintah, skrip yang cukup kecil sudah cukup.

Ini dia contoh 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()

Untuk berjalan di Ubuntu 12.04 pertama lakukan:

sudo apt-get install python-tk

Tangkapan layar:

Perintah yang dihasilkan untuk tangkapan layar:

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

Perilaku:

  • jika nilai --text= kosong maka dihilangkan
  • sakelar hanya muncul jika kotak yang sesuai dicentang

Jika Anda ingin menerapkan fitur baru di atas kode itu, saya sarankan Anda melakukannya di sini. Jika sudah cukup baik, mari pisahkan ke repo baru dan buat pip dapat diinstal.


Linux
  1. Titan – Pengelola Kata Sandi baris Perintah Untuk Linux

  2. ppl – Buku Alamat Baris Perintah Untuk Linux

  3. Moro – Alat Produktivitas Baris Perintah Untuk Melacak Jam Kerja

  1. 8 perintah Linux virsh untuk mengelola VM pada baris perintah

  2. Spesifikasi Umum Untuk Antarmuka Baris Perintah?

  3. Ny Ligature-aware Alternatif Untuk "pdfgrep" Di Command Line?

  1. 8 tips untuk baris perintah Linux

  2. Kiat Baris Perintah Linux untuk Meningkatkan Produktivitas

  3. Klien GUI SVN untuk Debian Linux