آموزش پای کیوت (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):

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

9 دیدگاه برای «آموزش پای کیوت (designer)»

    1. این bace_class در واقع یه meta class برای form_class هستش . یعنی form_class ویژگی هایی رو از bace_class به ارث می بره. به ۲خط زیر دقت کنین
      print uic.loadUiType('myUi.ui')
      print form_class, base_class

      مشخص می شه که خط اول یک تاپل ۲تایی از کلاس های Ui_Form و QWidget رو بر می گردونه . کلاس window ویژگی های ui_Form و ui_Form ویژگی های QWidget رو به ارث می بره

  1. سلام دوست عزیز .
    بنده به تازگی کمی وقتم آزادتر شده و تصمیم گرفتم که Python رو یاد بگیرم و ازش بصورت عملی استفاده کنم.
    هدف اصلی بنده طراحی سایت با این زبان برنامه نویسی هستش.
    توضیح اینکه قبلا ( تقریبا ۱۰ سال پیش ) با محیط های دلفی کار کردم و در حد دانشجوئی کارهایی باهاش انجام دادم.
    حالا اگه لطف کنید راهنمایی بفرمائید که بنده از کجا شروع کنم و چه مسیری رو باید طی کنم تا به هدفم برسم ممنون میشم .و اینکه آیا بعد از یادگیری آیا سروری تو ایران هست که از این زبان پشتیبانی کنه یا خیر .
    با تشکر فراوان از سایت بسیار خوبتون .

    1. درود خدمت شما . برای استفاده از پایتون در وب علاوه بر اشنایی با خود زبان پایتون نیاز به استفاده از یک فریم ورک وب نوبیسی دارین که یکی از معروف ترین فریم ورک ها جنگو هستش که یه کتاب فوق العاده عالی هم برای این فریم ورک به زبان فارسی ترجمه شده که می توانید با سرچ کتاب django در گوگل اون رو از سایت آزادراه د انلود کنید .بله روی سرورها و هاست های درون ایرانم پایتون قابل نصبه. روی تمام هاست ها

  2. آقا بسیار عالی بود!
    واقعا دمت گرم٫من عاشقه پایتون هستم!
    راستی من فک میکنم که نظر شما درسته که اگه PyQt رو دستی کد بدیم بهتر و حرفه ایی تره!ولی وقتی برای سریعتر کردن کار میشه با دیزاینر طرح رو ساخت و بعد با تبدیل کردن به کد پایتون بیشتر روش مانور اومدو کاستومایزش کرد!
    من میخوام بگم که اول طراحی با دیزاینر رو خوب و کامل یاد بدین بعد بریم سراغه کد زنی!
    و تورو خدا ادامه بده!خیلی عالیه و خدا قووت!
    واقعا من نیاز دارم به دانشت!چون دقیقا افکارم بشما نزدیکه!

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

    ممنون

  4. با سلام خدمت شما و تبریک سال جدید

    یک خخواهشی ازتون دارم لطفا :

    ۱ : اموزشهای PyQt بیشتر کنید و به صورت تصویری و فیلم اموزش بدید؟

    ۲: لطفا برنامه PQ designer واسه دانلود بذارید

    ۳: لطفا درباره اموزش کدنویسی تحت شبکه و وب هم بذارید ممنون میشم

    با تشکر

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *