PyQt - Introduction
PyQt เป็นเครื่องมือเครื่องมือ GUI เป็นส่วนติดต่อ Python สำหรับ Qt ซึ่งเป็นหนึ่งใน GUIlibrary ที่มีประสิทธิภาพและเป็นที่นิยมมากที่สุด PyQt เป็นการผสมผสานระหว่างภาษา Python และ Qtlibrary บทแนะนำเบื้องต้นนี้จะช่วยคุณในการสร้างแอ็พพลิเคชันแบบกราฟิกด้วย PyQt
บทแนะนำนี้ได้รับการออกแบบมาสำหรับโปรแกรมเมอร์ซอฟต์แวร์ที่กระตือรือร้นในการเรียนรู้วิธีการพัฒนาแอ็พพลิเคชันแบบกราฟิกโดยใช้ PyQt
คุณควรมีความเข้าใจพื้นฐานเกี่ยวกับคำศัพท์ในการเขียนโปรแกรมคอมพิวเตอร์ ความเข้าใจพื้นฐานของ Python และภาษาโปรแกรมใด ๆ เป็นบวก
PyQt เป็นเครื่องมือเครื่องมือ GUI เป็นส่วนติดต่อ Python สำหรับ Qt ซึ่งเป็นหนึ่งใน GUIlibrary ที่มีประสิทธิภาพและเป็นที่นิยมมากที่สุด PyQt ได้รับการพัฒนาโดย RiverBank Computing Ltd. โดย PyQt รุ่นล่าสุดสามารถดาวน์โหลดได้จากเว็บไซต์อย่างเป็นทางการ riverbankcomputing.com
PyQt API คือชุดของโมดูลที่มีจำนวนชั้นเรียนและฟังก์ชันมาก ในขณะที่โมดูล QtCore มีฟังก์ชันการทำงานที่ไม่ใช่ GUI สำหรับการทำงานกับไฟล์และไดเร็กทอรีเป็นต้นโมดูล QtGui มีการควบคุมกราฟิกทั้งหมด นอกจากนี้ยังมีโมดูลสำหรับการทำงานร่วมกับ XML (QtXml), SVG (QtSvg) และ SQL (QtSql) ฯลฯ
PyQt สามารถทำงานร่วมกับระบบปฏิบัติการ ได้แก่ Windows, Linux และ Mac OS มีใบอนุญาตแบบคู่พร้อมใช้งานภายใต้ GPL รวมทั้งใบอนุญาตการค้า
Windows คุณสามารถดาวน์โหลดและติดตั้งโปรแกรมติดตั้งที่เหมาะสมได้จากลิงค์ดาวน์โหลดด้านบนที่เกี่ยวข้องกับ Python version (2.7 หรือ 3.4) และสถาปัตยกรรมฮาร์ดแวร์ (32 บิตหรือ 64 บิต) โปรดทราบว่า PyQt มีอยู่ 2 รุ่นคือ PyQt 4.8 และ PyQt 5.5 ในขณะที่ PyQt4 สามารถใช้ได้กับ Python 2 และ Python 3 PyQt5 สามารถใช้ได้พร้อมกับ Python 3 * เท่านั้น
Linux สำหรับ Ubuntu หรือการแจกจ่าย Debian Linux อื่น ๆ ให้ใช้คำสั่งต่อไปนี้เพื่อติดตั้ง PyQt -
sudo apt-get install python-qt4
or
sudo apt-get install pyqt5-dev-tools
โครงการ Mac PyQtX ของระบบปฏิบัติการ (http://sourceforge.net/projects/pyqtx/) จัดเตรียมไฟล์ไบนารีของ PyQt for Mac ใช้โปรแกรมติดตั้ง Homebrew ตามคำสั่งต่อไปนี้ -
brew install pyqt
PyQt - Hello World
การสร้างแอ็พพลิเคชัน GUI แบบง่ายๆโดยใช้ PyQt เกี่ยวข้องกับขั้นตอนต่อไปนี้ -
- นำเข้า โมดูล QtGui import QtGui
- สร้างแอ็พพลิเคชันอ็อบเจ็กต์ app = QtGui.QApplication(sys.argv)
- วัตถุ QWidget สร้างหน้าต่างระดับบนสุด w = QtGui.QWidget()
- เพิ่มวัตถุ QLabel b = QtGui.QLabel(w)
- ตั้งคำอธิบายภาพของป้ายกำกับว่า "hello world" b.setText("Hello World!")
- กำหนดขนาดและตำแหน่งของหน้าต่างโดยใช้วิธี setGeometry ()
- ป้อนแอปพลิเคชันหลักโดยใช้เมธอด app.exec_ ()
import sys
from PyQt4 import QtGui
def window():
app = QtGui.QApplication(sys.argv)
w = QtGui.QWidget()
b = QtGui.QLabel(w)
b.setText("Hello World!")
w.setGeometry(100,100,200,50)
b.move(50,20)
w.setWindowTitle(‘PyQt’)
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
window()
รหัสข้างต้นผลิตผลลัพธ์ต่อไปนี้ -
PyQt - Major Classes
PyQt API เป็นกลุ่มของCLASSและMETHODS CLASS เหล่านี้มีการกำหนดไว้มากกว่า 20 โมดูล ต่อไปนี้เป็นบางส่วนของโมดูลที่ใช้บ่อย -
S.No. | Modules & Description |
1 | QtCore Core non-GUI classes used by other modules |
2 | QtGui Graphical user interface components |
3 | QtMultimedia Classes for low-level multimedia programming |
4 | QtNetwork Classes for network programming |
5 | QtOpenGL OpenGL support classes |
6 | QtScript Classes for evaluating Qt Scripts |
7 | QtSql Classes for database integration using SQL |
8 | QtSvg Classes for displaying the contents of SVG files |
9 | QtWebKit Classes for rendering and editing HTML |
10 | QtXml Classes for handling XML |
11 | QtAssistant Support for online help |
12 | QtDesigner Classes for extending Qt Designer |
PyQt API มีมากกว่า 400 คลาส คลาส QObject อยู่ที่ด้านบนสุดของลำดับชั้นของคลาส เป็นคลาสพื้นฐานของวัตถุ Qt ทั้งหมด นอกจากนี้ชั้น QPaintDevice เป็นคลาสพื้นฐานสำหรับวัตถุทั้งหมดที่สามารถทาสีได้ ชั้น QApplication จัดการการตั้งค่าหลักและควบคุมการไหลของแอพพลิเคชัน GUI ประกอบด้วยห่วงเหตุการณ์หลักภายในซึ่งเหตุการณ์ที่สร้างขึ้นโดยองค์ประกอบของหน้าต่างและแหล่งข้อมูลอื่น ๆ จะถูกประมวลผลและส่ง นอกจากนี้ยังจัดการการตั้งค่าทั้งระบบและแอ็พพลิเคชันทั้งหมด คลาส QWidget ที่ได้จากคลาส QObject และ QPaintDevice เป็นคลาสพื้นฐานสำหรับอ็อบเจ็กต์อินเทอร์เฟซผู้ใช้ทั้งหมด คลาส QDialog และ QFrame ยังมาจากคลาส QWidget พวกเขามีระบบย่อยของตนเอง
ภาพประกอบต่อไปนี้แสดงถึงCLASSที่สำคัญบางอย่างในลำดับชั้นของพวกเขา
นี่เป็นรายการที่เลือกของเครื่องมือที่ใช้บ่อย -
ด้านล่างนี้เป็นวิดเจ็ตที่ใช้ทั่วไป
S.No. | Widgets & Description |
1 | QLabel Used to display text or image |
2 | QLineEdit Allows the user to enter one line of text |
3 | QTextEdit Allows the user to enter multi-line text |
4 | QPushButton A command button to invoke action |
5 | QRadioButton Enables to choose one from multiple options |
6 | QCheckBox Enables choice of more than one options |
7 | QSpinBox Enables to increase/decrease an integer value |
8 | QScrollBar Enables to access contents of a widget beyond display aperture |
9 | QSlider Enables to change the bound value linearly. |
10 | QComboBox Provides a dropdown list of items to select from |
11 | QMenuBar Horizontal bar holding QMenu objects |
12 | QStatusBar Usually at bottom of QMainWindow, provides status information. |
13 | QToolBar Usually at top of QMainWindow or floating. Contains action buttons |
14 | QListView Provides a selectable list of items in ListMode or IconMode |
15 | QPixmap Off-screen image representation for display on QLabel or QPushButton object |
16 | QDialog Modal or modeless window which can return information to parent window |
หน้าต่างระดับบนสุดของแอ็พพลิเคชัน GUI ตามปกติจะสร้างขึ้นโดยใช้อ็อบเจ็กต์ QMainWindow widget วิดเจ็ตบางอย่างที่ระบุไว้ข้างต้นจะใช้ตำแหน่งที่ได้รับการแต่งตั้งในหน้าต่างหลักนี้ขณะที่เครื่องมืออื่น ๆ จะอยู่ในพื้นที่เครื่องมือส่วนกลางโดยใช้ตัวจัดการรูปแบบต่างๆ
แผนภาพต่อไปนี้แสดงกรอบงาน QMainWindow -
PyQt - Using Qt Designer
โปรแกรมติดตั้ง PyQt มาพร้อมกับเครื่องมือสร้าง GUI ที่เรียกว่า Qt Designer ใช้อินเตอร์เฟซแบบลากและวางที่เรียบง่ายอินเตอร์เฟซ GUI สามารถสร้างได้อย่างรวดเร็วโดยไม่ต้องเขียนโค้ด อย่างไรก็ตามไม่ใช่ IDE เช่น Visual Studio ดังนั้น Qt Designer ไม่มีสิ่งอำนวยความสะดวกในการแก้ปัญหาและสร้างแอ็พพลิเคชัน
การสร้างอินเทอร์เฟซ GUI โดยใช้ Qt Designer เริ่มต้นด้วยการเลือกหน้าต่างระดับบนสุดสำหรับแอ็พพลิเคชัน
จากนั้นคุณสามารถลากและวางวิดเจ็ตที่ต้องการได้จากช่องวิดเจ็ตที่บานหน้าต่างด้านซ้าย นอกจากนี้คุณยังสามารถกำหนดค่าให้กับคุณสมบัติของวิดเจ็ตที่วางไว้ในแบบฟอร์ม
แบบฟอร์มที่ออกแบบมาจะถูกบันทึกเป็น demo.ui ไฟล์ ui นี้ประกอบด้วยการแสดง XML ของวิดเจ็ตและคุณสมบัติในการออกแบบ การออกแบบนี้แปลเป็น Python เทียบเท่าโดยใช้ยูทิลิตีบรรทัดคำสั่ง pyuic4 ยูทิลิตี้นี้เป็น wrapper สำหรับโมดูล uic การใช้ pyuic4 เป็นดังนี้ -
pyuic4 –x demo.ui –o demo.py
ในคำสั่งดังกล่าวสวิตช์ -x จะเพิ่มโค้ดจำนวนเล็กน้อยลงใน XML ที่สร้างขึ้นเพื่อให้เป็นแอ็พพลิเคชันแบบสแตนด์อโลนที่สามารถทำงานได้เอง
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Dialog = QtGui.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
สคริปต์ _python ที่เป็นผลลัพธ์จะถูกดำเนินการเพื่อแสดงกล่องโต้ตอบต่อไปนี้ -
ผู้ใช้สามารถป้อนข้อมูลในช่องป้อนข้อมูล แต่คลิกที่ปุ่มเพิ่มจะไม่สร้างการทำงานใด ๆ เนื่องจากไม่มีการเชื่อมโยงกับฟังก์ชันใด ๆ การตอบสนองต่อการตอบสนองที่ผู้ใช้สร้างขึ้นเรียกว่าเป็นการจัดการเหตุการณ์
PyQt - Signals & Slots
ซึ่งแตกต่างจากแอ็พพลิเคชันโหมดคอนโซลซึ่งจะดำเนินการในลักษณะตามลำดับแอ็พพลิเคชันที่ใช้ GUI จะถูกขับเคลื่อนด้วยเหตุการณ์ ฟังก์ชันหรือวิธีดำเนินการเพื่อตอบสนองการกระทำของผู้ใช้เช่นการคลิกที่ปุ่มเลือกรายการจากคอลเล็กชันหรือการคลิกเมาส์ ฯลฯ ซึ่งเรียกว่าเหตุการณ์
_Widgets ที่ใช้สร้างอินเทอร์เฟซ GUI ทำหน้าที่เป็นแหล่งที่มาของเหตุการณ์ดังกล่าว เครื่องมือ PyQt แต่ละอันซึ่งมาจากคลาส QObject ถูกออกแบบมาเพื่อปล่อย 'signal' เพื่อตอบสนองต่อเหตุการณ์อย่างน้อยหนึ่งเหตุการณ์ _signal ในตัวเองไม่ได้ดำเนินการใด ๆ แทนที่จะเป็น '_connected' กับ '_slot' _slot สามารถเรียกฟังก์ชันใดๆของ Python ก็ได้
ใน PyQt การเชื่อมต่อระหว่างสัญญาณกับช่องสามารถทำได้ในรูปแบบต่างๆ ต่อไปนี้เป็นเทคนิคที่ใช้กันมากที่สุด -
QtCore.QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function)
วิธีที่สะดวกมากขึ้นในการเรียก slot_function เมื่อสัญญาณถูกส่งออกโดยเครื่องมือมีดังนี้ -
widget.signal.connect(slot_function)
สมมติว่าฟังก์ชันถูกเรียกเมื่อคลิกปุ่ม ที่นี่สัญญาณที่ถูกคลิกจะเชื่อมต่อกับฟังก์ชัน callable มันสามารถทำได้ในใด ๆ ของทั้งสองเทคนิคดังต่อไปนี้ -
QtCore.QObject.connect(button, QtCore.SIGNAL(“clicked()”), slot_function)
หรือ
button.clicked.connect(slot_function)
Example
ในตัวอย่างต่อไปนี้ QPushButton วัตถุที่สอง (b1 และ b2) ถูกเพิ่มในหน้าต่าง QDialog เราต้องการเรียกใช้ฟังก์ชัน b1_clicked () และ b2_clicked () เมื่อคลิก b1 และ b2 ตามลำดับ
เมื่อคลิก b1 สัญญาณ clicked () จะเชื่อมต่อกับฟังก์ชัน b1_clicked ()
b1.clicked.connect(b1_clicked())
เมื่อคลิก b2 สัญญาณ clicked () จะเชื่อมต่อกับฟังก์ชัน b2_clicked ()
QObject.connect(b2, SIGNAL("clicked()"), b2_clicked)
CODE
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
def window():
app = QApplication(sys.argv)
win = QDialog()
b1 = QPushButton(win)
b1.setText("Button1")
b1.move(50,20)
b1.clicked.connect(b1_clicked)
b2 = QPushButton(win)
b2.setText("Button2")
b2.move(50,50)
QObject.connect(b2,SIGNAL("clicked()"),b2_clicked)
win.setGeometry(100,100,200,100)
win.setWindowTitle("PyQt")
win.show()
sys.exit(app.exec_())
def b1_clicked():
print "Button 1 clicked"
def b2_clicked():
print "Button 2 clicked"
if __name__ == '__main__':
window()
รหัสดังกล่าวก่อให้เกิดผลลัพธ์ต่อไปนี้ -
Button 1 clicked
Button 2 clicked
PyQt - Layout Management
วิดเจ็ต GUI สามารถวางไว้ภายในหน้าต่างคอนเทนเนอร์โดยระบุพิกัดสัมบูรณ์ที่วัดได้เป็นพิกเซล พิกัดจะสัมพันธ์กับมิติข้อมูลของหน้าต่างที่กำหนดโดย setGeometry () method
setGeometry() syntax
QWidget.setGeometry(xpos, ypos, width, height)
ในข้อมูลโค้ดต่อไปนี้หน้าต่างระดับบนสุดที่มีขนาด 300 x 200 พิกเซลจะแสดงที่ตำแหน่ง (10, 10) บนจอภาพ
import sys
from PyQt4 import QtGui
def window():
app = QtGui.QApplication(sys.argv)
w = QtGui.QWidget()
b = QtGui.QPushButton(w)
b.setText("Hello World!")
b.move(50,20)
w.setGeometry(10,10,300,200)
w.setWindowTitle(“PyQt”)
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
window()
วิดเจ็ต PushButton ถูกเพิ่มในหน้าต่างและวางไว้ที่ตำแหน่ง 50 พิกเซลทางด้านขวาและ 20 พิกเซลด้านล่างตำแหน่งบนซ้ายของหน้าต่าง ตำแหน่งสัมบูรณ์นี้ไม่เหมาะสมเนื่องจากสาเหตุต่อไปนี้ -
- ตำแหน่งของวิดเจ็ตไม่เปลี่ยนแปลงแม้ว่าจะมีการปรับขนาดหน้าต่างก็ตาม
- ลักษณะที่ปรากฏอาจไม่เหมือนกันบนอุปกรณ์แสดงผลที่แตกต่างกันโดยมีความละเอียดแตกต่างกัน
- การปรับเปลี่ยนรูปแบบเป็นเรื่องยากเพราะอาจต้องปรับเปลี่ยนรูปแบบใหม่ทั้งหมด
นี่คือรายการของ .Classes ที่เราจะพูดถึงทีละบทในบทนี้
Sr.No | Classes & Description |
1 | ชั้น QBoxLayout ขึ้นเครื่องมือในแนวตั้งหรือแนวนอน คลาสที่ได้รับคือ QVBoxLayout (สำหรับจัดเครื่องมือในแนวตั้ง) และ QHBoxLayout (สำหรับจัดเรียงวิดเจ็ตในแนวนอน) |
2 | ออบเจ็กต์ GridLayout คลาสแสดงเซลล์ตารางเรียงเป็นแถวและคอลัมน์ _class มีวิธี addWidget () วิดเจ็ตสามารถเพิ่มได้โดยการระบุจำนวนแถวและคอลัมน์ของเซลล์ |
3 | QFormLayout เป็นวิธีที่สะดวกในการสร้างฟอร์มสองคอลัมน์โดยที่แต่ละแถวประกอบด้วยฟิลด์ป้อนข้อมูลที่เชื่อมโยงกับป้ายกำกับ การประชุมคอลัมน์ด้านซ้ายมีฉลากและคอลัมน์ด้านขวามีช่องป้อนข้อมูล |
ความคิดเห็น
แสดงความคิดเห็น