منبع اصلی نوشتار زیر در این لینک قرار دارد

zenity بخش دوم

در مورد zenity قبلا نوشتم، امروز میخوام چند تا دیگه از حالات اون رو توضیح بدم.
دیالوگ انتخاب فایل
این دیالوگ برای همه آشناست :

دیالوگ انتخاب فایل

دیالوگ انتخاب فایل


اگه شما بخواید این دیالوگ نمایش داده بشه، به این صورت عمل کنید :

zenity --file-selection

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

your_var=<code>zenity --file-selection</code>
echo $your_var

این اشتباه معمولا پیش میاد که فکر میکنن دو تا علامت بک تیک، در دو طرف دستور علامت ‘ هستش، در صورتی که این کاراکتر،‌ علامت بک تیک، همون کاراکتر زیر دکمه Esc (معمولا توی کیبردهای استاندارد)‌ هستش. وقتی توی دستورات bash، یه دستور توی این دو تا علامت قرار بگیره، اول اجرا میشه و بازگشتیش میشه هر چیزی که توی ترمینال نوشته.
انتخابهای عمومی رو در پست قبلی توضیح دادم.حالا میرسیم به انتخابهای مخصوص این دیالوگ :

5-1 : –filename=FILENAME

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

5-2 : –multiple

این گزینه باعث میشه که کاربر بتونه بیشتر از یه فایل رو انتخاب کنه.(با گرفتن کلید هایی مثل شیفت یا کنترل) وقتی که کاربر دکمه تایید رو میزنه همه این فایلها در خروجی نوشته میشن که با یه علامت پایپ | از هم جدا شدن. این علامت قابل تغییره (انتخاب separator رو پایین تر توضیح میدم)

5-3 : –separator=SEPARATOR

این گزینه برای انتخاب جدا ساز استفاده میشه، اینطوری کاربر میتونه علامت پایپ رو که در حالت انتخاب چند تایی استفاده میشه رو عوض کنه. اگه ننویسیدش پیشفرضش پایپ “|” میشه.

5-4 : –directory

این برای وقتی مناسبه که شما بخواید یه پوشه رو انتخاب کنید و نه یک فایل رو. در این حالت فایلها نمایش داده میشن ولی قابل انتخاب نیستن.

5-5 : –save

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

5-6 : –confirm-overwrite

این حالت (که بهتره حتما با حالت save بکار بره) اگه کاربر یه فایل موجود رو انتخاب کنه بهش هشدار میده. اینطوری خطر از بین رفتن فایل کمتر میشه.

نمایش پنجره اطلاعات
این حالت دقیقا شبیه حالت error هستش که قبلا (توی پست اول)‌توضیح داده شد، تنها تفاوت نمایش آیکون اونهاست، تو حالت error آیکون خطا نمایش داده میشه و تو این حالت این آیکون :

دیالوگ نمایش پیغام

دیالوگ نمایش پیغام


برای ایجاد این دیالوگ اینطوری عمل کنید:

zenity --info

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

6-1 : –text=STRING

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

zenity --info --text="This is an info!"
6-2 : –no-wrap

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

zenity --info --no-wrap --text="this is very loooooong text!"

لیست قابل انتخاب
من مدتها بود که با دیالوگ گنوم برای خاموش کردن سیستم مشکل داشتم، فقط Logout میکرد، بنابراین خودم با کمک zenity یه کد کوچیک نوشتم که اینکار رو انجام میداد :)‌اینم تصویرش :

دیالوگ انتخاب

دیالوگ انتخاب


برای دیدن این دیالوگ باید از این دستور استفاده کنید :

zenity --list --column=test

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

zenity --list --column=test value1 value2 value3 

اینطوری یه ستون ایجاد میشه به اسم test و سه تا مقدار داره که به ترتیب value1 تا value3 هستن. اما راه دوم اینه که برنامه به جای خوندن مقادیر از خط فرمان اونها زو از ورودی بخونه، کافیه این برنامه رو اجرا کنیم و بعد توی ترمینالی که برنامه اجرا شده، مقادیر رو تایپ کنیم. مهم نیست که برنامه اجرا شده، چون همچنان ورودی بازه و شما میتونید توش بنویسید. یا مثلا اگه بخواید میتونید از یک فایل بخونید و توی لیست نمایش بدید، مثلا برای اینکه لیست آخرین دستورهای زده شده توی ترمینال رو ببینید این کار رو انجام بدید :

cat ~/.bash_history | zenity --list --column="Command history"

به علامت ” دقت کنید، اگه اون گذاشته نشه، zenity فقط Command رو انتخاب میکنه و یه گزینه history هم داخلش میگذاره، اصولا فاصله در خط فرمان باید با ” محصور بشه. حالا اگه کاربر یه سطر رو انتخاب کنه و تایید کنه چی میشه؟ محتوای ستون اول (دقت کنید فقط ستون اول از سطر انتخاب شده، نه همه ستونهای اون سطر) در خروجی نوشته میشه. برای ایجاد لیست چند ستونه، پایینتر رو ببینید.
–نکته جالب : دو طرف دستور بالایی یه جفت بک تیک بگذارید، کاربر که یه دستور رو انتخاب کنه، اون دستور دوباره اجرا میشه :))

7-1 : –text=STRING

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

cat ~/.bash_history | zenity --list --text="Select your command from history" --column="Command history" 
7-2 : –column=STRING

با این میتونید یه ستون تعریف کنید. اگه مثلا دو تا ستون لازم باشه، اونوقت دو بار این رو باید بنویسید،‌ سه تا سه بار و … دقت کنید هر کدوم جلوتر باشه همون میشه ستون اول و بعدی به ترتیب ستون دوم و سوم. اگه بیشتر از یه ستون داشته باشیم، اونوقت مقادیری که مینویسیم برای ستونها تقسیم میشه. اولی میرسه به سطر اول ستون اول، ذومی به سطر اول ستون دوم و سومی به سطر اول ستون سوم، با فرض اینکه ۳ ستون داشته باشیم چهارمی میرسه به سطر دوم ستون اول الی آخر.

7-3 : –checklist

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

zenity --list --checklist --column="Ckeck" --column="Value" TRUE alpha FALSE beta

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

7-4 : –radiolist

این حالت،‌دقیقا مثل حالت checklist میشه، فقط تفاوت در اینه که انتخابهای رادیویی :)‌داره و در هر لحظه فقط یکیشون میتونه فعال باشه. برای مواقعی خوبه که کاربر فقط باید یه گزینه رو انتخاب کنه. برای دیدن تفاوت اینو اجرا کنید :

zenity --list --radiolist --column="Radio" --column="Value" TRUE alpha FALSE beta

و میبینید که اینبار فقط در هر لحظه یه گزینه انتخاب میشه نه بیشتر.

7-5 : –multiple

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

7-6 : –separator=SEPARATOR

این گزینه برای انتخاب جدا ساز استفاده میشه، اینطوری کاربر میتونه علامت پایپ رو که در حالت انتخاب چند تایی استفاده میشه رو عوض کنه. اگه ننویسیدش پیشفرضش پایپ “|” میشه.

7-7 : –editable

این گزینه که توی خط فرمان باشه، به کاربر امکان ویرایش رو میده. کاربر میتونه به راحتی متن داخل هر سلول رو ویرایش کنه.

7-8 : –print-column=NUMBER

بالاتر گفتم که همیشه اولین ستون برگردونده میشه، اگه به صورت checklist یا radiolist هم باشه ستون دوم. اینجا میتونید ستون بازگشتی رو عوض کنید. ستون اول میشه ۱ ستون دوم میشه ۲ الی آخر. اگر بنا به دلایلی همه ستونها رو بخواید، میتونید به جای عدد بنویسید ALL .

7-9 : –hide-column=NUMBER

گاهی لازم میشه یه سطر رو مخفی کنید. فرض کنید شما به هر سطر یه عدد نسبت دادید و میخواید کاربر که سطر رو که انتخاب کرد شماره سطر چاپ بشه و از طرفی هم نمیخواید سطر شماره نمایش داده بشه، خیلی راحت میتونید اون رو مخفی کنید. عکسی که بالاتر گذاشتم با این کد تولید شده :

zenity --list --title="System control" --text="What you wana do " --hide-column=1 --column="ID" --column="Action" --column="Description" "1" "Shutdown" "Shutdown your system" "2" "Reset" "Restart your system"

سطرID نمایش داده نمیشه. شماره سطر ها هم از یک شروع میشه.
آیکون در System Tray

آیکون در System Tray

آیکون در System Tray


اما آخری برای این پست، نمایش یک آیکون در System Tray (البته اگه شما Tray داشته باشید) برای اینکار شما باید از گزینه notification استفاده کنید.
–نکته جالب اینکه توی راهنما اصلا حرفی از تغییر آیکون زده نشده ولی به راحتی ممکنه :) از دستورات هم چیزی گفته نشده، و من مجبور شدم که سورس کد این برنامه رو ببینم :) توی راهنمای نسخه جدید 2.32 توضیح داده شده.

zenity --notification --window-icon=/usr/share/pixmaps/gksu.png --text="Hello"

اما، تو این حالت، دپارامترهای زیر وجود دارند :

8-1 : –window-icon=PATH/TO/ICON

قبلا این رو توی انتخابهای عمومی گفته بودم، البته اینبار فقط تکرارش میکنم چون این حالت zenity دقیقا یه پنجره نیست. این گزینه آیکونی که در System-tray نمایش داده میشه رو عوض میکنه. توی راهنمای zenity هم این گفته نشده ولی توی مثالها گفته شده.

8-2 : –text=STRING

با این گزینه، متن tooltip عوض میشه، متنی که وقتی ماوس روی آیکون قرار میگیره نمایش داده میشه.

8-3 : –listen

با ذکر این پارامتر، zenity منتظر دستورات شما میشود. اما اگر این نباشد، zenity اصلا از stdin استفاده نخواهد کرد. اما چه دستوراتی توسط zenity پشتیبانی میشوند؟ و کجا باید نوشته شوند؟
این دستورات باید در ترمینال نوشته شوند یا با پایپ به برنامه پاس داده شوند مثلا :

echo "message:a message from zenity" | zenity --notification --window-icon=/usr/share/pixmaps/gksu.png --text="Hello" --listen

اینطوری، یه پیغام نشون داده میشه توی کنار صفحه.
اما دستورات به این صورت باید باشند :

command:parameter

دستورات پشتیبانی شده عبارتند از :

message:show me!

این دستور یک پیغام را به صورت تیپ نمایش میدهد.

icon:/path/to/icon

آیکون را عوض میکند.

tooltip:tip for icon

با این دستور، متن تیپ مربوط به آیکون عوض میشه. همون متنی که با text تنظیم شده.

visible:false

با این دستور میشه آیکون رو نامریی کرد یا دوباره مرئی کرد (فقط true و false میتونه باشه )
این دستورات، خیلی ساده بررسی میشن، حتی فاصله اضافی میتونه دردسر ساز باشه.
خوب فکر کنم هنوز یه پست دیگه لازمه!!!!!



برچسب ها : , , , , , ,