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

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

در مقدمه آموزش پای کیوت شما با این فرم ورک نحوه آن اشنا شدید حالا در بخش اول اموزش پای کیوت می خوام شمارو با ماژول های رابط گرافیکی کیوتی و سپس عناصر یک رابط گرافیکی  اشنا کنم  و بعد از اشنایی با چارچوب اصلی کد کیوتی  یک برنامه ساده رو کد بزنم

ساختار کتابخانه ای Qt4

QtCore:

  • انواع مقادیر پایه:QByteArray,QString,QDate,QTime,QSize,QPoint
  • آبجکت ها و متا آبجکت ها: QObject, QMetaObect
  • سیستم فایل:QFile,QDire,QIODivice,QTextStream,QDateStream
  • پشتیبانی اپلیکشن پایه:QCoreApplication,QEvent,QTimer

QtGui:

  • ویدجتها:QCheckBox,QComboBox,QDateTimeEdit,QLineEdit,QPushButton,QRadioButton,QLabel,QSlider,etc
  • انواع مقادیر پایه:QColor,QFont,QBrush,QPen
  • پشتیبانی اپلیکشن:QApplication
  • جعبه متنی پیشرفته:QTextEdit,QTextDocument,QTextCursor

 

چهارچوب اصلی یک اپلیکشن:

 

from PyQt4 import QtGui
import sys

class MainWindow(QtGui.QMainWindow):
    def __init__(self): super(MainWindow, self).__init__()
    # QMainWindow.__init__(self)

if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())

در کد بالا که معمولا چهارچوب ثابت کد یک اپلیکشن هست ابتدا یک کلاس MainWindow با وراثت از QMainWindow  موجود در کتابخانه ی پای کیوت می سازیم . سپس شی ای بنام window  از روی این کلاس ایجاد کرده و با دستور show  انرا اجرا  می کنیم . حلا کد بالا توسط پایتون اجرا کنید و نتیجه کاز را می توانید در تصویر پایین ببینید. توجه کنید کامنت سبز رنگ مشخص شده در کد عیارتی را نشان می دهد که می تواند بجای عبارت سوپر دز خط بالایش جایگزین شود . در واقع این دو خط باهم مترادف هستند و به ما می گن که کلاس MainWindow تمام صفات تعریف شده در QMainWindowای که در کتابخانه کیوتی قرار دارد را دارا می باشد.

استفاده از ویدجت ها:

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

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


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

الان من می خام دیگه کد اصلی رو بنویسم پس ویدجت هایی که برای کار لازم دارم رو مشخص می کنم:

self.label = QtGui.QLabel("Please enter your name:")
self.nameLabel = QtGui.QLabel("Name")
self.nameEdit = QtGui.QLineEdit()
self.okButton = QtGui.QPushButton("ok")

حالا باید این ویدجت هارو توسط لایه ها در جای مناسبشون قرار بدم:

widget = QtGui.QWidget()
self.setCentralWidget(widget)

vLayout = QtGui.QVBoxLayout() #vertical Layout
hLayout = QtGui.QHBoxLayout() #Horizontal Layout
hLayout.addWidget(self.nameLabel)
hLayout.addWidget(self.nameEdit)

vLayout.addWidget(self.label)
vLayout.addLayout(hLayout)
vLayout.addWidget(self.okButton)

widget.setLayout(vLayout)

در این بخش از کد با ابتدا یک ویدجت ایجاد کرده و آن رو در مرکز MainWindow قرار می دیم سپس لایه ها رو ایجاد کرده و با متد setLayout  در آخر لایه اصلی رو درون این ویدجت قرار می دهیم . لایه ها  شامل یک لایه ی Horizontal(افقی) و یک لایه ی Vertical (عمودی) هستش که در لایه افقی nameLabel و nameEdit  قرار می گیره  سپس این لایه نیز در کنار ۲ ویدجت label و okButton در وسط قرار می گیرد  و لایه عمودی به ویدجت داده می شود.  سادس . فقط باید کمی کار کنین و مثال های بیشتری رو ببینین تا راه بیافتین . برای شروع مثال های همراه پای کیوت بسیار جالب و مفید و آموزنده هستند. خب من در اینجا گرافیک یه برنامه رو ایجاد کردم :

from PyQt4 import QtGui

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        # QMainWindow.__init__(self)
        self.label = QtGui.QLabel("Please Enter Your Name:")
        self.nameLabel = QtGui.QLabel("Name")
        self.nameEdit = QtGui.QLineEdit()
        self.okButton = QtGui.QPushButton("ok")

        widget = QtGui.QWidget()
        self.setCentralWidget(widget)

        vLayout = QtGui.QVBoxLayout() #vertical Layout
        hLayout = QtGui.QHBoxLayout() #Horizontal Layout
        hLayout.addWidget(self.nameLabel)
        hLayout.addWidget(self.nameEdit)

        vLayout.addWidget(self.label)
        vLayout.addLayout(hLayout)
        vLayout.addWidget(self.okButton)

        widget.setLayout(vLayout)

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

حالا باید روحی در این کالبد بدمیم تا عملگرا باشه

    self.connect(self.okButton,QtCore.SIGNAL("clicked()"),
self.WriteMyName)
    # self.okButton.clicked.connect(self.WriteMyName)

    def WriteMyName(self):
        name = self.nameEdit.text()
        text = "Hello dear <font size='3' color='blue'>%s</font> welcome to <font size='3' color='red'>'www.dotPy.ir'</font>"%name
        self.label.setText(text)

در خط اول  یک سیگنال کلیکی( دستور مترادف دیگر نیز در خط زیر درج شده) برای دکمه ی ok  ایجاد کردم . زمانی که این دکمه فشرده شد سیگنال تابع مربوط به عملیات لازم را (WriteMyName) فرا خوانی می کند و کار انجام می شود . کد کامل شده برنامه ما بصورت زیر می باشد:

from PyQt4 import QtGui , QtCore

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        # QMainWindow.__init__(self)
        self.label = QtGui.QLabel("Please Enter Your Name:")
        self.nameLabel = QtGui.QLabel("Name")
        self.nameEdit = QtGui.QLineEdit()
        self.okButton = QtGui.QPushButton("ok")

        widget = QtGui.QWidget()
        self.setCentralWidget(widget)

        vLayout = QtGui.QVBoxLayout() #vertical Layout
        hLayout = QtGui.QHBoxLayout() #Horizontal Layout
        hLayout.addWidget(self.nameLabel)
        hLayout.addWidget(self.nameEdit)

        vLayout.addWidget(self.label)
        vLayout.addLayout(hLayout)
        vLayout.addWidget(self.okButton)

        widget.setLayout(vLayout)
        self.connect(self.okButton, QtCore.SIGNAL("clicked()"), self.WriteMyName)
        #self.okButton.clicked.connect(self.WriteMyName)

    def WriteMyName(self):
        name = self.nameEdit.text()
        text = "Hello dear <font size='3' color='blue'>%s</font> welcome to <font size='3' color='red'>'www.dotPy.ir'</font>"%name
        self.label.setText(text)

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

خب کد نویسی در اینجا تموم شد ولی باید دوباره یادآوری کنم که پای کیوت و کیوتی دنیایی بسیار بزرگی و وسیع می باشد که شاید بیش از یک سال طول بکشه  تا به در حد متوسط-خوب بشه اون رو فرا گرفت این آموزش تنها شمارو  گام هایی در ورود به  این دنیا پیش می بره ولی پیشروی در قلمروی این فریم ورک زیبا و جذاب و حرفه ای بر عهده خود شما می باشه و همه چیز بستگی به تلاش ها و زمانی داره که خود شما صرف این دنیای زیبا و حرفه ای می کنید :)

 



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