KDialog

17 04 2009

KDialog یک ابزار بسیار مناسب برای افرادی است که میخواهند شل اسکریپت بنویسند .
این ابزار به این افراد اجاز میده که به کمک اون بعضی از دیالوگها رو به صورت گرافیکی استفاده کنند .

به طور کلی ، KDialog به شما کمک میکنه تا اسکریپت هاتونو گرافیکی کنید .
اما برای هر کاری به یک سوییچ نیاز دارید که هدف این پست معرفی کردن این سوییچ هاست .

به علت طولانی شدن پست ، بقیه در ادامه مطلب میباشد ;)

پیغامهای yes/no و مشابهات آن :
فرض کنید که یک شل اسکریپت ساده نوشتید که وسطش از کاربر میخواد که اجازه انجام یک کاری رو بده . مثلا اجازه اجرای برنامه bilbo .
اگر دستور زیر رو تحت خط فرمان اجرا کنید یک پنجره مانند عکس زیر جلوتون ظاهر میشه :

kdialog --yesno "Your Message" --title "Message Title"

روش استفاده از این دستور تو شل اسکریپت ها خیلی راحته . کافیه اونو تو شرط if استفاده کنید . یعنی اینجوری :

if kdialog --yesno "Do you realy want to run bilbo" --title "Run Bilbo ?" then
bilbo
fi

با اجرا کردن این دستورات ، از شما سوال پرسیده میشه که آیا bilbo رو اجرا کنم و با کلیک کردن بر روی yes بیلبو اجرا میشه .
همینطور و با همین ترکیب به جای سوییچ yesno از سوییچ های yesnocencel ، warningyesno ، warningcontinuecancel و warningyesnocancel استفاده کنید .

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

kdialog --sorry "Your Message" --title "Message Title"

حتی میتونید برای تغییر نوع پیغامها جای سوییچ sorry از سوییچ های errorو msgbox استفاده کنید .

پیغام InputBox :
این پیغام موقعی استفاده میشه که شما بخواهید یک رشته یا همون کلمه رو از کاربر بپرسید :

kdialog --inputbox "Your Message" "Default" --title "Message Title"

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

stringA=`kdialog --inputbox "Your Message" "Default" --title "Message Title"`

اینجوری نامی که کاربر وارد کرده میره تو stringA و شما از اون طریق میتونید ازش استفاده کنید .

دریافت پسورد :
این پیغام مثل پیغام بالا وظیفه دریافت یک رشته و یا همون کلمه رو داره . اما با این تفاوت که این دفعه این کلمه پسورده . پس موقع ورود کلمه ، حرف ها نباید معلوم باشند و جاشون باید ستاره بیاد .

kdialog --password "Your Message" --title "Message Title"

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

stringB=`kdialog --password "Your Message" --title "Message Title"`

نشان دادن متن :
خب گاهی وقتها هم پیش میاد تو این اسکریپت باید یک متنی رو به کاربر نشون بدید :

kdialog --textbox "Path/to/a/textFile" Width Height --title "Title"

جای width و height اندازه صفحه ای که میخواهید باز بشه رو بنویسید .

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

kdialog --textinputbox "Your Message" "Default Text" --title "Message Title"

برای استفاده از این دستور تو اسکریپتتون از دستورالعمل زیر استفاده کنید :

stringC=`kdialog --textinputbox "Your Message" "Default Text" --title "Message Title"`

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

kdialog --title "Message Title" --combobox "Message" item1 item2 item3 ... itemN

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

stringD=`kdialog --title "Message Title" --combobox "Message" item1 item2 item3 ... itemN`

و بعد گزینه ای که توسط کاربر اتخاب میشه توی stringD ذخیره میشه .
حالا شاید بخواید که به یه شکل دیگه واستون نمایش داده بشه :

kdialog --title "Message Title" --menu "Message" a item1 b item2 c item3 ... itemN

این دستور دقیقا مثل دستور بالا میمونه با یک تفاوت . اون تفادوت اینه که به جای اینکه نام گزینه رو به عنوان خروجی به شما بده ، نامی که خودتان مشخص میکنید رو میده . یعنی مثلا تو دستور بالا اگه کاربر item2 رو انتخاب کنه ، دستور حرف b رو به عنوان خروجی تحویل میده .

اما دو دستور بالا بعضی جاها به درد اسکریپت ما نمیخورند . اون دو جا موقعیه که کاربر باید چند تا گزینه رو انتخاب کنه :

kdialog --title "Message Title" --checklist "Message" a item1 A b item2 B c item3 C ... ItemN N

چون شکل این دستور دقیقا مثل شکل بالایی بود ، قرار داده نشدش .
این دستور چند تفاوت داره .
اولیش اینه که کاربر با گرفتن کلید کنترل میتونه چند تا گزینه رو با هم انتخاب کنه .
دومیش اینه که خروجی این دستور به این شکله : “b” “c”
و سومیش که من نمیدونم چرا ، اینه که جلوی هر گزینه یک کلمه دیگه هم باید مشخص بشه . کاربردشو نفهمیدم کجاست . واقعا کجاست ؟

یه دستور دیگه هم هست که دقیقا از نظر عمل کرد مثل دستور بالاست ، با این تفاوت که فقط یک گزینه قابل انتخاب هستش :

kdialog --title "Message Title" --radiolist "Message" a item1 A b item2 B c item3 C ... ItemN N

بالا بر :
برای به وجود آوردن یک بالابر یا همون popup باید از این دستور استفاده کنید :

kdialog --title "Message Title" --passivepopup "Message" 15

به جای 15 مدت زمانی که میخواهید بالابر شما نمایش داده بشه رو قرار بدید . البته بر حسب ثانیه . ;)

کار با فایلها :
شاید شما بخواهید که کاربرتون مکانی رو به شما نشون بده که فایلی رو براش ذخیره کنید . شاید بخواهید کاربر آدرس یک فایل رو به اسکریپت بده .
همه اونا با سوییچهای getopenfilename ، getsavefilename ، getopenurl ، getsaveurl و getexistingdirectory انجام پذیر هستند .
این دستورها به شکل زیر استفاده میشند :

kdialog --title "Message Title" --multiple --getopenurl /home filter

با این تفاوت که سوییچ آخری یعنی getexistingdirectory فیلتر نداره . جای /home آدرس پیشفرض و جای filter فیلترتون رو مشخص میکنید . اگر سوییچ multiple رو هم حذف کنید ، کاربر فقط یک فایل رو میتونه انتخاب کنه .

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

kdialog --progressbar "Initialising" 4

اما دستور بالا به تنهایی هیچ کاربردی نداره و نخواهد داشت . علت این قضیه اینه که دستور kdialog با سوییچ progressbar به شما یک کد تحویل میده تا بتونید تو دستورهای بعدی ازش استفاده کنید . پس بهتره دستور بالا رو به شکل زیر بنویسیم :

dbusRef=`kdialog --progressbar "Initialising" 4`

حالا کدی که به ما تحویل داده شده تو dbusRef ذخیره شده و میتونید اونو با دستور زیر ببینید :

echo $dbusRef

که خروجی تقریبا به شکل زیر داره :

org.kde.kdialog-16114 /ProgressDialog

اما برای عملیات بعدی dbusRef برای آدرس دهی خیلی بدردمون میخوره .
تو دستور بالا یک عدد 4 دیده میشه . این عدد تعداد مرحله ها رو مشخص میکنه . یعنی هر مرحله 25 درصد .
برای انتخاب مرحله یک از دستور زیر استفاده میکنیم :

qdbus $dbusRef Set org.kde.kdialog.ProgressDialog value 1

به جای عدد 1 شماره مرحله رو بزارید . بعد از وارد کردن دستور بالا خواهید دید که پراگرسبار از صفر درصد به 25 درصد میره .
همینطور هرموقع که خواستید میتونید برچسب و یا همون label ی رو که تو عکس بالا نوشته Initialising رو عوض کنید :

qdbus $dbusRef org.kde.kdialog.ProgressDialog.setLabelText "Step 1"

که جای step1 برچسبی رو که خودتون دوست دارید رو قرار بدید .
هر موقع که لازم شد این دیالوگ بسته بشه از دستور زیر استفاده کنید :

qdbus $dbusRef org.kde.kdialog.ProgressDialog.close

انتخاب رنگ :
خیلی مواقع پیش میاد که کاربر باید یک رنگ رو انتخاب کنه .
دیالوگ مربوط به رنگها با این دستور نمایش داده میشند :

kdialog --title "Title" --getcolor

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

برای اطلاعات بیشتر و دقیق تر درباره kdialog به اینجا مراجه کنید .


کارها

اطلاعات

دیدگاه‌تان را بنویسید: