下面我們從一個簡單的登入對話方塊來瞭解PyQt5的開發過程。
PyQt5支援兩種介面開發方式:一種是在QtDesigner中設計介面,各種控制項直接通過拖動添加;一另種是直接撰寫介面代碼,通過代碼控制介面上的控制項。下面我們將分別通過這兩種方式建立一個如圖1所示的登陸對話方塊。
圖1 一個簡單的登陸對話方塊 QtDesigner設計介面
經過上一篇文章的設定後,我們可通過功能表列的“Tool”→“QT Tool”→“Qt Designer”開啟QtDesigner程式,進行介面設計,如圖2。
圖2 QtDesinger介面
由於我們只需建立一個簡單的視窗,故選擇模板為“Widget”,單擊“建立”,即進入視窗編輯介面,如圖3所示。
圖3 建立視窗
我們只需將所需的控制項拖入即可,這裡我們需要2個Push Button(Buttons中),2個Label(Display Widget中)和2個Line Edit(Import Widgets中)。拖入後大致安排好位置(如圖4)。
圖4 視窗初步設計
在視窗空白處單擊滑鼠右鍵,選擇“布局”→“柵格布局”,即可將控制項大致排列好。
然後,在對象查看器中單擊對象,即可在屬性編輯對話方塊設定控制項屬性。這個項目中我們進行如下設定:
設定Form的“WindowTitle”為“登入介面”,
設定兩個Label的“text”分別為“使用者名稱”和“密碼”,
設定兩個按鈕的“text”分別為確定和取消。 設定完後將視窗調到適當大小(圖5)。
圖5 最終視窗
最後,將本視窗以ui檔案儲存在專案檔夾,選擇此檔案,單擊滑鼠右鍵,選擇“QT Tool”→“PyUIC”,即可產生py檔案。
直接撰寫介面代碼
在上一節產生的ui檔案是需要轉換成py檔案來使用的。故,我們也可以直接撰寫介面代碼,來進行開發。
代碼如下:
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import *
class Ui_Form(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("登入介面")
self.resize(200,100)
lay=QFormLayout()
self.setLayout(lay)
Lab1=QLabel("使用者名稱")
Line1=QLineEdit()
Lab2 = QLabel("密碼")
Line2 = QLineEdit()
OkB=QPushButton("確定")
CB=QPushButton("取消")
lay.addRow(Lab1,Line1)
lay.addRow(Lab2, Line2)
lay.addRow(OkB,CB)
代碼說明:
第2行,匯入PyQt5的控制項,PyQt5的各種控制項一般均放在PyQt5.QtWidgets模組中,本行代碼匯入了所有的控制項,也可只匯入本程式用到的控制項,即寫作“from PyQt5.QtWidgets import QWidget,QFormLayout,QLabel,QLineEdit,QPushButton”,熟知Python文法的人可能有其他寫法,本篇不再贅述;
第4行,建立Ui_Form類,從QWidget基類派生;
第5、6行,建構函式,完整寫法為:
def init(self,parent=None):
super(Ui_form,self).init(parent)
而在Python3中可以簡化為第5、6行的形式;
第7行,設定視窗名稱;
第8行,設定視窗尺寸;
第9、10行,設定總體布局;
第12~19行,建立控制項對象;
第21~3行,將控制項加入布局中。 運行程式
以上產生的視窗類別可以在同一個py檔案中書寫main函數進行調用。不過筆者不建議這樣做。尤其是第一種方法中需要修改視窗時,同時也要重建py檔案,還需重寫main函數。
我們可以另寫一個main.py,來運行對話方塊。代碼如下:
# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets
from Dlg import Ui_Form
import sys
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
myshow = Ui_Form()
myshow.show()
sys.exit(app.exec_())
代碼說明:
第3行,從對話方塊檔案中匯入類,Dlg為對話方塊檔案名稱;
第6行,主程式定義在這行語句下面,輸入“main”然後按“Tab”鍵可快速輸入;
運行main.py,即可運行這個對話方塊程式。
讚賞作者
本文作者
小溪
土木工程碩士畢業,碩士期間利用Python進行資料處理和ABAQUS二次開發,現就職於上海某土木工程諮詢公司,從事土木工程軟體開發工作。
點擊閱讀原文,領取爬蟲課程100元代金券,限額50名