زنیتی (zenity) یک برنامه کوچک برای نمایش دیالوگ GTK+ از طریق خط فرمانه. این برنامه مجموعه کاملی از دیالوگها رو ارایه میده که میتونه برای نوشتن یک اسکریپت که دیگه از خط فرمان خارج بشه خیلی مفیده. به ترتیب دیالوگهای اون و انتخابهای (Options ) مربوط به هر دیالوگ رو توضیح میدم.
پیشنیار :
طبیعیه که zenity باید نصب بشه. برای نصبش :

# For ubuntu :
apt-get install zenity
# For Archlinux
pacman -S zenity
# Fedora
yum install zenity

برای اجرای اون :

zenity [options...]

اما دیالوگهایی که zenity پشتیبانی میکنه.

  1. تقویم
  2. ورودی متن
  3. نمایش پنجره خطا
  4. انتخاب فایل
  5. نمایش پنجره اطلاعات
  6. لیست قابل انتخاب
  7. آیکون در System Tray
  8. دیالوگ پروگرس
  9. پنجره سوال
  10. پنجره حاوی متن بلند (مثل لیسانس)
  11. هشدار
  12. انتخاب عدد توسط اسلایدر

بعد از یک توضیح مختصر درباره انتخابهای عمومی یکی به یکی همه اینها رو معرفی میکنم (البته بیشتر از یک پست نیازه)

1- انتخابهای عمومی

یه سری انتخابهای عمومی هستن که برای هر حالت zenity قابل استفاده هستن. چون zenity یک سری دیالوگ نمایش میده طول و عرض دیالوگ، متن caption ، آیکون پنجره و زمان tiemout که این امکان رو میده که بعد از یه مدتی دیالوگ بسته بشه و اگر قراره جوابی برگرده جواب پیشفرض باش.
این انتخابها (که به تنهایی کار نمیکنن و حتما باید با یکی از انواع دیالوگ بالا باشن) عبارتند از :

1-1 : –title=STRING

برای تغییر متن عنوان پنجره. مثلا به این صورت :

zenity --calendar --title="This is my title"

همونطور که بالاتر هم گفتم این انتخابها نمیتونن به تنهایی استفاده بشن، تو این مثال من از calendar استفاده کردم که یک دیالوگ تقویم نشون میده (چند خط پایینتر رو ببینید.)و بعد با کمک title عنوان رو عوض میکنه با اون متنی که من دادم. نکته ای که اینجا هست، عبارتهای فارسی شاید توی کنسول درست نشون داده نشن، ولی توی پنجره درست نمایش داده میشن بنابراین میتونید عنوان رو فارسی هم بزنید.

1-2 : –window-icon=ICONPATH

مسیر آیکون پنجره.یادتون باشه بعضی از theme های گنوم اصلا گوشه بالا سمت چپ پنجره آیکونی نمایش نمیدن! منطقا این برای اونها بی معنیه :

zenity --calendar --window-icon="/usr/share/pixmaps/gok.png"
1-3 : –width=INT –height=INT

اینها هم (هر دو انتخاب) باعث میشن که طول و عرض پیشفرض دیالوگ عوض شه توی GTK زیاد ارزشی قایل نیستن برای این طول و عرض :D و میشه گفت این به عنوان مینیمم پیشنهادی هستش. یعنی اگه تو دیالوگ عنصر بزرگتری باشه خیلی راحت اینو زیر پا میگذاره. مثال :

zenity --calendar --width=800 --height=300
1-4 : –timeout=INT

این باعث میشه دیالوگها بعد از مدت خاصی بسته بشن. مدت به ثانیه هست.

zenity --calendar ---timeout=5

اگه دیالوگ دکمه پیشفرض داشته باشه انگار کاربر اون دکمه رو فشرده. معمولا دکمه لغو دکمه پیشفرضه.

اما خود دیالوگها….

۲- تقویم

یک تقویم نشون میده که به این شکل هست :

پیالوگ تقویم در zenity که با zenity --calendar به وجود آمده

دیالوگ تقویم در zenity


برای ایجاد این تقویم باید آرگومان calendar رو به zenity پاس بدیم. مثلا تقویمی با عنوان “Choose your birthday” :

zenity --calendar --title="Choose your birthday"

خوب مساله اصلی اینه که حالا دیالوگ نمایش داده شد، اگه کاربر یه تاریخ رو انتخاب کنه من تو اسکریپت چطور بگیرمش؟ خیلی ساده zenity تاریخ انتخاب شده رو توی خروجی چاپ میکنه(به صورت پیشفرض اینجوری : 07/31/2010 ).شما میتونید با یه پایپ اونو به برنامه بعدی پاس بدید. اگه cancel انتخاب شه چیزی توی خروجی چاپ نمیشه. اگه timeout داشته باشه بعد ار رسیدن زمان انگار دکمه cancel فشرده شده باشه. مثلا :

zenity --calendar --title="Choose your birthday" | cut -d"/" -f3

سالی که کاربر انتخب کرده رو چاپ میکنه مثلا 2010. حالا انتخابهای ویژه تقویم .

2-1 : –text=STRING

متن بالای تقویم رو عوض میکنه (نه متن پنجره، برای اون از title استفاده میشه)

zenity --calendar --title="Choose your birthday" --text="Please select your birthday"
2-2 : –day=INT –month=INT –year=INT

مقادیر انتخاب شده پیشفرض. هر کدوم از این سه تا رو به تنهایی یا با هم میشه به کار برد. مثلا :

zenity --calendar --day=29 --year=2008 --month=10
2-3 : –date-format=PATTERN

برای انتخاب طریق نمایش تاریخ استفاده میشه. مثلا %Y برای نمایش سال یا %j برای نمایش اینکه چند روز از سال گذشته. برای لیست کامل راهنمای date رو ببینید (man date رو توی کنسول بزنید)

zenity --calendar --date-format=%j

در این حالت تو خروجی چاپ میشه که این روز انتخاب شده روز چندم ساله.فقط یادتون باشه این دیالوگ فقط از روز و ماه و سال پشتیبانی میکنه نه ساعت و ثانیه و دقیقه و کل واحدهای کمتر از روز.

۳- ورودی متن

در این حالت به شما این امکان داده میشه که یک متن از کاربر بگیرید به این صورت :

zenity --entry

اینهم تصویرش :‌

دیالوگ ورودی متن که با zenity --entry به وجود آمده

دیالوگ ورودی متن در zenity


اگه کاربر دکه OK رو کلیک کنه متن نوشته شده توی خروجی چاپ میشه و شما میتونید اون رو مثلا با پایپ پاس بدید به برنامه بعدی اگه Cancel زده بشه یا اینکه timeout سر برسه (اگه با –timeout تنظیم شده باشه) هیچی در خروجی چاپ نمیشه و خارج میشه. انتخابهای مخصوص این دیالوگ اینها هستن :

3-1 : –text=STRING

که باعث میشه متن بالای دیالوگ (نه متن داخل نوار عنوان که قبلا گفتم با title عوض میشه) عوض بشه. مثلا :

zenity --entry --text="Enter your name" --title="This is title"
3-2 : –entry-text=STRING

متن پیشفرض داخل دیالوگ که کاربر میتونه عوضش کنه. مثلا :

zenity --entry --entry-text="Default text"
3-3 : –hide-text

این گزینه برای اینه که متن داخل به صورت ستاره دار بشه و مناسبه برای گرفتن کلمه رمز. مثلا :

zenity --entry --hide-text --text="Enter your password"

۴-دیالوگ نمایش خطا

این دیالوگ به شما امکان میده که یک متن خطا رو به کاربر نشون بدید. البته نمایش اون به معنی ایجاد خطا نیست، شما میتونید از طریق این دیالوگ مثلا به کاربر خوش آمد بگید ولی یه کم غیر طبیعیه :) شکلش اینه :

دیالوگ خطای zenity که با zenity --error به وجود اومده

دیالوگ خطای zenity


برای ایجادش اینکار رو انجام بدید :

zenity --error

اینهم آرگومانهای این مدل دیالوگ :

4-1 : –text=STRING

برای اینکه متن نمایش داده رو عوض کنید از این انتخاب استفاده میشه مثلا :

zenity --error --text="This is an error!"
4-2 : –no-wrap

بودن این انتخاب به zenity میگه که متنهای طولانی رو هم نشکنه و توی یک خط نمایش بده. مثلا :

zenity --error --no-wrap --text="Very loooooong text"

فعلا تا همین جا بسه. تا بعدی :)