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

آموزش پای کیوت (designer)

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

آشنایی با دیزاینر

در تصویر بالا محیط دیزاینر رو مشاهده می کنین که به ۵ پنج بخش تقیسمش کردم بخش اول شامل ویدجت های گرافیکی برای طراحی رابط کاربری هستش بخش دوم ویدجت اصلی ما هستش که لای اوت ها و تمام ابجکت ها درون اون قرار داده می شوند. بخش سوم ما شامل تمام ویدجت های بکار گرفته در ویدجت اصلی هستش در اینجا می شه اسم ویدجت خاصی رو مثلا ویدجتی از نوع QLabel یا QPushButton رو تغییر داد در بخش چهارم ویژگی های ویدجت انتخاب شده نظیر سایز، فونت ، کارسور ، استایل و… را تنظیم کرد بخش پنجم  برای ساختن سیگمال بکار می ره،  فرض کنید شما دکمه close رو ساختین ولی ساختن دکمه بتنهایی نمی تونه عمل خارج شدن از برنامه تکمیل کنه . باید بوسیله سیگنال ها به ویدجت اصلی که تمام ویدجت ها درون اون هستن اعلام کنیم که باید بسته بشه ، این بخش درحقیقت روح برنامس.

حالا بسراغ طراجی رابط گرافیکی خودمون می ریم  با ویدجت های QLineEdit و QPushButton و QLabel و QTextBrowser یه چیزی شبیه تصویر زیر رو طراحی می کنم

از ویدجت های QLabel  یکی  رو nameLabel و یکی رو browserLabel مخصوص فیلد های خودشون  نام گذاری کردم به طرز نام گذاری کلاس ها و ویدجت ها و .. در کیوتی دقت کنین که مثلا Q line edir رو بصورت QLineEdit نام گذاری کردن حروف اول هر کامه با حروف بزرگ نوشته می شه که خواناتر می شه منم برای نام گذاری ویدجت ها این کار می کنم که همه چیز مشخص باشه مثلا ویدجت QLabel مربوط به فیلد نام رو با nameLabel در بخش سوم از دیزاینر نام گذاری کردم.

یک ویدجت QLineEdit برای گرفتن نام کاربر با نام nameEdit و ویدجت QTextBrowser ای با نام browser

ذو ویدجت QPushButton با نام های helloB و closeB که B  مخفف button هست.

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

در بحش پنجم که signal/slot editor نام داره می خوام برای closeB سیگنالی رو اختصاص بدم که با کلیک کردن بر روی اون به پنجره اصلی برنامه اعلام کنه که باید بسته بشی.

برای sender  ، فرستنده سیگنال که closeB هستش  سیگنال  clicked() و برای دریافت کننده Form  و slot رو close از برنامه انتخاب می کنیم. تمام ویدجت های برنامه رو می شه با همین سیگنال و اسلات ها بکار گرفت . اما من می خوام یه ذره کدنویسی هم قاطیش کنم تا اموزش کامل بشه ;)

خب فرم ساخته شده رو با نام مثلا myUi.ui ذخیره میکنم و دیگه کارم با دیزاینر تموم شد می روم سراغ IDLE دوست داشتنی :)  و کد زیر رو تایپ می کنم با برنامه رو با پسوند پای ذخیره می کنم:

#!/usr/bin/env python
import sys

from PyQt4 import QtCore, QtGui, uic

form_class, base_class = uic.loadUiType('myUi.ui')

class window(QtGui.QDialog, form_class):
    def __init__(self, *args):
        super(window, self).__init__(*args)

        self.setupUi(self)
        self.helloB.clicked.connect(self.printHello)

    def printHello(self):
        name = self.nameEdit.text()
        self.browser.setText('Hello %s! welcom to dotPy.ir'%name)
if __name__=="__main__":
    app = QtGui.QApplication(sys.argv)
    form = window()
    form.show()
    sys.exit(app.exec_())

یه توضیحی کوچیک برای کد بالا بدم که ماژول uic وظیفه ترجمه ui ها به پایتون رو داره

form_class, base_class = uic.loadUiType('myUi.ui')

ابجکتی از فایل myUi.ui لود شده برای پایتون را با نام form_class می سازیم و کلاس window  رو وارثی از این ابجکت قرار می دیم تا بتونیم از تمام ویدجت های بکار گرفته در فرم ui درون کلاس window استفاده کنیم

class window(QtGui.QDialog, form_class):

حالا برنامه رو اجرا کنین ;)



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