Cara menggunakan widget grafik dalam skrip bash dengan Zenity

Cara menggunakan widget grafik dalam skrip bash dengan Zenity

Zenity adalah utiliti yang sangat berguna yang membolehkan kita membuat antara muka pengguna grafik untuk skrip shell kami. Beberapa widget wujud, dan boleh digunakan dengan menggunakan program dengan pilihan masing -masing. Widget berdasarkan pada Gtk toolkit, dan kembalikan hasil interaksi pengguna sama ada pada output standard atau sebagai kod pulangan.

Dalam tutorial ini anda akan belajar:

  • Apakah pilihan Zenity Umum
  • Apakah beberapa widget yang paling berguna dan cara menggunakannya



Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Pengedaran-bebas
Perisian Utiliti zenity
Yang lain Kebiasaan dengan shell (bash dalam kes ini) dan konsep seperti kod subshell dan keluar
Konvensyen # - Memerlukan arahan Linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$ - Memerlukan arahan Linux yang diberikan sebagai pengguna yang tidak layak

Pemasangan

The Zenity Pakej dimasukkan ke dalam repositori semua pengagihan Linux utama, dan mungkin sudah dipasang jika anda menggunakan Gnome persekitaran desktop. Untuk memasangnya, kami boleh menggunakan pengurus pakej pengedaran kegemaran kami, di Fedora, Contohnya, kita boleh menggunakan DNF:

$ sudo DNF memasang zenity


Apabila menggunakan pengagihan berasaskan Debian dan Debian seperti Ubuntu, kita boleh menggunakan perintah apt-get:

$ sudo apt-get pemasangan zenity

Zenity sudah termasuk dalam archlinux tambahan repositori, oleh itu kita boleh memasangnya melalui Pacman:

$ sudo pacman -s Zenity

Pilihan generik

Sebelum kita mula melihat beberapa widget yang paling berguna yang disediakan oleh Zenity, Kita harus menyebut beberapa pilihan generik yang ada yang boleh kita gunakan untuk mengubah tingkah laku program.

Kami memanggil mereka generik kerana mereka boleh digunakan secara bebas daripada widget yang dipilih: --tajuk, --janda-icon, --lebar, --ketinggian dan --masa tamat.

Pertama sekali kita mempunyai --tajuk Pilihan: Kami boleh menggunakannya untuk menentukan tajuk untuk tetingkap dialog. Begitu juga, --tingkap-icon pilihan mari kita nyatakan ikon yang akan digunakan sebagai ikon untuk tetingkap, dan akan dapat dilihat, sebagai contoh, dalam bar tugas. Untuk memaparkan ikon dalam widget, sebaliknya, kita boleh menggunakan --nama ikon pilihan dan berikan salah satu nama ikon yang dibenarkan (di sini adalah senarai lengkap) sebagai argumen. Untuk menggunakan ikon stok yang disediakan dalam dialog kesilapan, maklumat, soalan, atau amaran, sebagai contoh, kita boleh menentukan masing -masing: Kesilapan dialog, dialog-info, Soalan dialog atau Perjamuan dialog.

The --lebar dan --ketinggian Pilihan cukup jelas: mereka membiarkan kami menentukan geometri tetingkap dialog kami.

Akhirnya, dengan menggunakan --masa tamat pilihan kita boleh menetapkan masa tamat dalam beberapa saat untuk dialog: Setelah jumlah masa yang ditentukan, ia akan ditutup secara automatik.



Widget yang ada

Terdapat beberapa widget yang boleh kita gunakan terima kasih kepada Zenity: masing -masing mempunyai tujuan tertentu. Mari lihat sebahagian daripada mereka.

Widget kalendar

Widget kalendar akan memaparkan kalendar dan biarkan pengguna memilih tarikh, dengan memilih bulan, hari dan tahun. Nilai yang dipilih akan dikembalikan di output standard. Untuk melancarkan kalendar widget, semua yang kita perlu hendaklah untuk memanggil Zenity, dengan --kalendar pilihan:

$ zenity -kalendar

Kita boleh menggunakan satu siri pilihan untuk menyempurnakan tingkah laku widget, sebagai contoh, dengan menggunakan --hari, --bulan, --tahun dan menyediakan Int Sebagai nilai, kita boleh menetapkan, masing -masing, hari lalai, bulan dan tahun yang akan dipaparkan dalam widget. Untuk menentukan format tertentu di mana tarikh yang dipilih harus dikembalikan, kita boleh menggunakan --Tarikh pilihan dan tentukan corak di strftime gaya.



Widget kalendar

Widget kemasukan

Widget entri sangat berguna apabila kita perlu meminta pengguna untuk beberapa teks. Katakanlah contohnya kita perlu meminta pengguna memasukkan namanya; Kita boleh menjalankan arahan berikut:

$ Zenity --Entry --Title "Permintaan Nama" --Text "Sila masukkan nama anda:"


Di sini kami menggunakan --tajuk dan --Teks Kemasukan pilihan untuk menyesuaikan, masing -masing, tajuk dan label yang untuk widget. Sebaik sahaja kita menjalankan arahan di atas, widget akan muncul:



Widget kemasukan

Teks yang dimasukkan oleh pengguna akan kembali ke output standard.

Widget pemilihan fail

Widget Pemilihan Fail Mari kita memaparkan antara muka grafik yang bagus untuk membiarkan pengguna memilih satu atau lebih fail. Sama seperti yang kita lakukan dalam contoh sebelumnya, kita boleh menggunakan siri pilihan untuk mengubah suai tingkah laku dan penampilan dialog. Salah satu yang paling penting ialah --nama fail yang boleh digunakan untuk menetapkan fail/direktori yang akan dipilih secara lalai. Berikut adalah gambaran ringkas mengenai pilihan dan fungsi yang mereka berikan:

Pilihan widget pemilihan fail zenity
Pilihan Fungsi
-nama fail Tetapkan direktori/fail lalai yang akan dipilih dalam widget
-pelbagai Dayakan keupayaan untuk memilih beberapa fail sekaligus
-penapis fail Tentukan penapis untuk nama fail
-direktori Hadkan pemilihan ke direktori
-Simpan Jalankan widget dalam mod "Simpan".
-mengesahkan-overwrite Tanya pengguna untuk pengesahan semasa menimpa fail yang ada
-pemisah Tentukan pemisah yang akan digunakan untuk memisahkan laluan apabila banyak fail
dipilih

Mari lihat contoh penggunaan widget. Katakan kami mahu membiarkan pengguna memilih pelbagai fail, dan kami mahukan kandungan pengguna $ Rumah direktori yang akan dipaparkan dalam widget apabila dibuka. Yang harus kita lakukan ialah menjalankan arahan berikut:

$ zenity--file-selection--ultiple--filename "$ home/"

Anda dapat melihat bahawa kami memberikan ketinggalan / ke jalan: Dengan cara ini kandungan direktori dipaparkan, bukannya direktori itu sendiri. Inilah widget kami:



Widget pemilihan fail

Sebaik sahaja kita mengklik butang "OK", laluan mutlak fail yang dipilih akan dikembalikan pada output standard, dipisahkan oleh watak, yang menjadi lalai adalah |:

/rumah/egdoc/muat turun/a.txt |/home/egdoc/muat turun/b.txt

Kita dapat dengan mudah mengubah pemisah, memberikan watak yang ingin kita gunakan sebagai argumen pilihan -separator.

Sekiranya kita membuka dialog di Simpan mod, Pengguna akan diminta memberikan nama fail yang dia mahu simpan. Sekiranya fail wujud dan kami menyediakan --mengesahkan-overwrite pilihan, dia akan diminta untuk mengesahkan dia mahu menimpanya:

$ Zenity-File-Selection--Save --confirm-overwrite--filename "$ home/"

Laluan yang dipilih akan dikembalikan kepada output standard, dan kami akan bebas menggunakannya dalam skrip kami.

Widget kemajuan

Widget lain yang menarik adalah kemajuan: kita boleh melancarkannya dengan menggunakan zenity dengan --kemajuan pilihan. Kita boleh menggunakannya, sebagai contoh, untuk menunjukkan kemajuan operasi jangka panjang. Berikut adalah beberapa pilihan yang paling berguna yang boleh kita gunakan dengan widget:

Pilihan Fungsi
-peratusan Menetapkan nilai peratusan awal bar kemajuan
-Auto-Close Secara automatik tutup dialog apabila kemajuan selesai
-Auto-Kill Bunuh proses induk jika dialog ditutup dengan membatalkan
butang
-tidak membatalkan Jangan paparkan butang Batal

Berikut adalah contoh bagaimana kita boleh menggunakan widget dalam skrip bash:



#!/Bin/Bash # # Skrip Dummy Untuk Menunjukkan Widget Kemajuan Zenity! (echo 25 echo "# siap ..." tidur 2 echo 30 echo "# membaca fail ..." tidur 2 echo 70 echo "# mencipta kandungan ..." tidur 1 echo 100 echo "# selesai!") | Zenity --Title" Progress Bar Example "-Progress --auto-Kill
Salinan

Skrip di atas sebenarnya tidak melakukan sebarang operasi, tetapi berguna untuk memahami bagaimana widget berfungsi. Terdapat dua perkara utama yang harus diperhatikan dalam kod: pertama sekali, perintah yang akan dilaksanakan dibungkus antara kurungan, oleh itu dilaksanakan dalam a Subshell: Ini adalah perlu untuk widget berfungsi dengan betul; Kedua, apabila kita bergema garis bermula dengan nombor, ini akan ditafsirkan sebagai peratusan bar kemajuan.

Dengan cara yang sama, ketika kita bergema garis yang bermula dengan # watak, ia akan digunakan sebagai teks yang akan dipaparkan dalam widget. Berikut adalah video pendek skrip dalam tindakan:

Widget Maklumat, Amaran dan Ralat

Untuk memaparkan maklumat, amaran atau mesej ralat, kita boleh menggunakan zenity dengan --maklumat, --amaran dan --ralat Pilihan, masing -masing. Dalam kes ini kita menggunakan --teks pilihan untuk menentukan mesej. Berikut adalah contoh pemberitahuan:

$ zenity - -info --width = 400 -height = 200 --text "Ini adalah pemberitahuan!"



Widget pemberitahuan

Menggunakan widget amaran, sama mudahnya:

$ zenity --warning --width = 400 -height = 200 --text "Ini adalah amaran!"



Widget amaran

Ini, sebaliknya adalah contoh mesej ralat:

$ zenity --error --width = 400 -height = 200 --text "Ini adalah ralat!"



Widget ralat

Widget soalan

Untuk mengemukakan soalan kepada pengguna dan mendapatkan jawapannya, kami boleh menggunakannya soalan widget, menggunakan Zenity dengan --soalan pilihan. Kami menentukan soalan menggunakan --teks pilihan, dan tentukan label butang 'ok' dan 'membatalkan', menggunakan masing -masing --ok-label dan --Batalkan label pilihan. Berikut adalah contoh:

$ zenity --question --text "Adakah anda pasti mahu berhenti?"--no-wrap --ok-label" ya "--cancel-label" no "



Widget soalan



Dalam kes ini, kami juga menggunakan --Tidak ada pilihan, untuk mengelakkan pembungkus teks dalam widget. Hasil pilihan pengguna tidak akan dipaparkan pada output standard; Sebaliknya, arahan akan menetapkannya Kod Keluar Oleh itu, jadi ia akan kembali 0 Sekiranya pengguna mengklik butang 'ok', dan 1 Jika dia mengklik pada 'Batalkan' satu atau menutup tetingkap (ini mungkin kelihatan kontra-intuitif, tetapi ingat daripada kod keluar 0 bermakna perintah dilaksanakan dengan kejayaan dalam shell).

Widget kata laluan

Ini adalah widget yang harus kita gunakan apabila kita mahu pengguna memasukkan kata laluan atau maklumat sensitif: teks yang dimasukinya bertopeng oleh peluru:



Widget kata laluan

Semasa teks yang dimasukkan dari pengguna bertopeng, nilai yang dikembalikan oleh widget akan kelihatan jelas pada output standard.

Widget pemilihan warna

Ini adalah satu lagi widget yang bagus. Dengan menggunakannya, kita boleh membuat pengguna memilih warna dari palet. Untuk menjalankannya, kami menggunakan Zenity dengan --pemilihan warna pilihan. Kita dapat menentukan warna yang dipilih pada mulanya dengan menggunakan --warna dan memberikan warna sebagai hujah. Berikut adalah contoh:



Widget pemilihan warna

Secara pilihan, kita boleh memaparkan palet warna sebaliknya, dengan --Show-Palette pilihan:

$ zenity-color-selection-warna merah-show-palette



Palet widget pemilihan warna

Warna yang dipilih oleh pengguna akan dikembalikan rgb Notasi mengenai output standard. Contohnya apabila memilih warna merah, yang berikut akan dikembalikan:

RGB (255,0,0)

Widget senarai

Widget seterusnya yang akan kita lihat, adalah widget senarai. Dengan itu, ada kemungkinan untuk membuat dialog berbilang lajur, dan secara pilihan membiarkan pengguna memilih satu atau berbilang pilihan melalui kotak semak atau butang radio. Untuk menjadikan zenity memaparkan jenis dialog ini, kami menggunakan --senarai pilihan dan tentukan lajur dan kandungannya; Sekiranya kita menghilangkannya, perintah itu akan gagal:

$ zenity -list tiada tajuk lajur yang ditentukan untuk dialog senarai.
Salinan

Untuk menentukan tajuk lajur, kami menggunakan --kolum pilihan dan berikan rentetan sebagai hujah. Kami mengulangi arahan untuk setiap lajur yang ingin kami buat:

$ zenity -list -lajur pemilihan -pengedaran kolumn

Dengan arahan di atas kami membuat dua lajur, dengan tajuk "Pemilihan" dan "Pengedaran". Sekarang kami akan menyediakan pengguna dengan satu siri baris, masing -masing mewakili taburan Linux. Dalam lajur pertama setiap baris kami akan meletakkan kotak semak untuk membiarkan pengguna memilih entri yang sepadan:



$ zenity -list -column Selection -column pengedaran palsu debian fedora sebenar -radiolist

Setiap rentetan yang kami sediakan selepas definisi lajur dikaitkan dengan lajur, bergantung pada urutan penampilan mereka. Seperti yang anda lihat, kami membuat dua baris. Dalam lajur pertama setiap baris kami memberikan nilai: kami menggunakan SALAH supaya kotak semak atau butang radio yang sepadan tidak dipilih apabila widget dipaparkan, dan Benar Untuk menetapkan input seperti yang ditandakan secara lalai. Inilah widget yang dihasilkan:



Widget senarai

Apabila kita mengklik butang "OK", dan lakukan pemilihan kami, nilai yang berkaitan dengan baris akan dilaporkan pada output standard. Sekiranya kita mahu membiarkan pengguna memilih berbilang baris, kita boleh menggunakannya --senarai semak Pilihan: | | watak akan digunakan untuk memisahkan nilai yang dipilih.

Kesimpulan

Dalam tutorial ini, kami belajar tahu Zenity, utiliti yang membolehkan kami menggunakan dialog grafik dalam skrip shell kami. Kami melihat apakah pilihan generik yang boleh kita gunakan dengan semua widget, seperti --lebar dan --ketinggian, Dan kami belajar menggunakan beberapa widget yang paling berguna yang dapat kami hasilkan dengan program ini. Untuk mengetahui lebih lanjut mengenai Zenity anda boleh berunding dengan manpage!

Tutorial Linux Berkaitan:

  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Menguasai Gelung Skrip Bash
  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Gelung bersarang dalam skrip bash
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
  • Mengendalikan input pengguna dalam skrip bash
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Tutorial Debugging GDB untuk Pemula
  • Fail Konfigurasi Linux: 30 teratas yang paling penting
  • Sistem Hung Linux? Cara melarikan diri ke baris arahan dan ..