در مقدمه آموزش پای کیوت شما با این فرم ورک نحوه آن اشنا شدید حالا در بخش اول اموزش پای کیوت می خوام شمارو با ماژول های رابط گرافیکی کیوتی و سپس عناصر یک رابط گرافیکی اشنا کنم و بعد از اشنایی با چارچوب اصلی کد کیوتی یک برنامه ساده رو کد بزنم
ساختار کتابخانه ای 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_())
خب کد نویسی در اینجا تموم شد ولی باید دوباره یادآوری کنم که پای کیوت و کیوتی دنیایی بسیار بزرگی و وسیع می باشد که شاید بیش از یک سال طول بکشه تا به در حد متوسط-خوب بشه اون رو فرا گرفت این آموزش تنها شمارو گام هایی در ورود به این دنیا پیش می بره ولی پیشروی در قلمروی این فریم ورک زیبا و جذاب و حرفه ای بر عهده خود شما می باشه و همه چیز بستگی به تلاش ها و زمانی داره که خود شما صرف این دنیای زیبا و حرفه ای می کنید