ورودی و خروجی – بخش سوم

سلام


فرض کنیم شما میخواین که کاربر از بین چندتا گزینه مشخص یکی رو انتخاب کنه مثلا جنسیت که یا باید زن باشه یا مرد. برای اینکار اول یه متغیر از نوع لیست درست میکنید که اعضای اون عبارتند از گزینه های مورد نظر شما به یونیکد.
حالا با استفاده از تابع appuifw.popup_menu() میتونید این لیست رو نمایش بدید. این تابع دو تا ارگومان ورودی داره که اولیش همون لیست شماست و دومیش عنوانیه که میخواین بالای گزینه ها برای کاربر نمایش داده بشه. خروجی تابع هم اندیس عضو انتخاب شده است. مثال:
colours = [u"Red", u"Green", u"Blue"]
colour = appuifw.popup_menu(colours, u"Pick a colour")


علاوه بر این کار راه بهتری هم وجود داره و اون استفاده از تابع appuifw.selection_list هست که دوتا آرگومان ورودی داره. اولی لیست گزینه هاست و دومی (اختیاری) یا صفره یا یک که اگه یک باشه کاربر میتونه با تایپ حروفی از نام اون گزینه، بین گزینه ها سرچ کنه. خروجی این تابع هم مثل خروجی تابع قبله.
ممکنه شما بخواین کاربر بتونه همزمان چند تا از گزینه ها رو با هم انتخاب کنه. برای اینکار شما باید از تابع appuifw.multi_selection_list استفاده کنید که سه تا آرگومان میگیره. اولیش لیست گزینه هاست، دومیش که اختیاری هست نوع لیستتون هست که از نوع متنی بوده و یکی از گزینه های "checkbox" و "checkmark" میتونه باشه. آرگومان سوم هم مثل آرگومان دوم تابع قبله و میتونه صفر یا یک باشه.
خروجی این تابع یک tuple بوده که شامل اندیس گزینه های انتخاب شده از لیست گزینه هاست. مثال:
entries = [u"Carrots", u"Potatoes", u"Onions", u"Tomatoes"]
selected = appuifw.multi_selection_list(entries, "checkbox",1)


حالا فرض کنید میخواین از کاربر مشخصات سجلیشو بگیرید مثلا نیاز به دریافت دو تا رشته دارید به عنوان نام و نام خانوادگی، نیاز به یه لیست انتخابی دارید به عنوان جنیسیت، نیاز به دریافت یه عدد دارید به عنوان شماره ملی و ... یه راه اینه که دونه دونه بر ا کاربر پیغام های مختلف نشون بدید و دونه دونه اطلاعات رو ازش بگیرید، یه راه دیگه هم اینه که کل متغیرها رو تو یه فرم جاسازی کنید و همه رو یجا از کاربر بگیرید.
برای این کار اول باید یه لیست بسازید که هر عضو اون بیانگر یکی از اطلاعاتیه که میخواین از کاربر بگیره. خب اما هر عضو این لیستتون خودش باید یک tuple دو یا سه عضوی باشه که عضو اول عنوان (برچسب) متغیریه که میخواین از کاربر بگیرین، عضو دوم نوع اون متغیره که یکی از عبارات
'text'، 'number'، 'float'، 'date'، 'time' و 'combo' هست که با پنج تا مورد اول آشنایی دارید و مورد ششم رو در ادامه توضیح میدم. عضو سوم هم که اختیاریه، مقدار پیشفرض رو بیان میکنه.
اما نوع combo برا وقتی بکار میره که بخوایم کاربر از بین چند تا گزینه فقط یکیشو انتخاب کنه (مثل همون جنسیت که گفتم) در این صورت عضو سوم tuple تون دیگه اختیاری نیست و خودش عبارته از یک tuple دو عضوه که عضو اولش، لیست گزینه های مورد نظر شماست و عضو دومش که اختیاریه اندیس عضویه که که میخواین به طور پیشفرض انتخاب شده باشه. (چه list تو tupleی شد!)
خب حالا وقتی این لیست رو ساختید میتونید از کلاس Form (به بزرگی حرف اول دقت کنید) از مدول appuifw‌ استفاده کنید.
برای این کار اول با استفاده از دستوری مثل x = appuifw.Form() فرم مورد نظرتون رو به متغیر x نسبت بدید. این دستور دو تا ورودی میگیره که اولیش لیست ساخته شده شماست و دومی نوع فرمتونه که یکی از موارد زیر یا مجموع چند تا از اوناست:[/FONT]
appuifw. FFormViewModeOnly [/FONT]که باعث میشه فرمتون فقط خواندنی بشه و کاربر نمیتومه مقادیر اون رو تغییر بدهappuifw.FFormEditModeOnly که کاربر میتونه اطلاعات خواسته شده رو وارد کنهappuifw.FFormAutoLabelEdit که کاربر میتونه عنوان برچسب ها رو هم ویرایش کنهappuifw.FFormAutoFormEdit که کاربر میتونه فرم رو هم ویرایش کنه و فیلدهای مورد نظرش رو به / از فرم اضافه / کم کنهappuifw.FFormDoubleSpaced که هر فیلد رو در دو خط نمایش میده. یک خط برچسب اون و دیگری مقدارش روخب حالا شما میتونید با فراخوانی متد execute از فرمتون، اون رو نمایش بدید. پس از بسته شدن فرمتون، x مثل لیستیه که درون اون مقادیر فرم (عنوان برچسب و مقدار اون) قرار گرفته. مثال:
import appuifw
jens = [u"Male", u"Female"]
fields = [(u"first name", 'text', u"ASedJavad"),
(u"Last name",'text'),
(u"jensiat", 'combo', (jens, 0)),
(u"kode melli",'number', 0),
(u"birth day", 'date', 0)]
x= appuifw.Form(fields, appuifw.FFormEditModeOnly)
x.execute()
appuifw.note(u'your firstname is: ' + x[0][2])
appuifw.note(your jensiat is: + jens[x[2][2][1]])
کلاس فر م چند متد داره که اینجا به دوتاشون اشاره میکنم. اولیش متد insert هست که دو تا آرگومان میگیره اولیش یک عدد هست و دومیش یک tuple هست که باعث میشه این tuple‌رو به عنوان فیلد شماره n ام (n مقدار آرگومان اول این متد هست) به فرم اضافه کنه مثال:
x.insert(2, ("your city",'text',u'Mashhad'))

دومین متد، متد pop هست که یک عدد رو به عنوان آرگومان ورودی میگیره (اختیاری) و فیلد n ام رو از فرم حذف میکنه (n همون آرگومان ورودیمونه). اگه این متد هیچ آرگومانی نگیره، آخرین فیلد رو حذف میکنه. مثال:
x.pop(1)

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