===============================================================
講解前提——已經在Windows或者Mac系統上安裝好PyQt5及其相應的配置
參考書:《PyQt5 快速開發與實戰》
===============================================================
(1)基本概念
窗口:指程序的整體界面,可以包含標題欄、菜單欄、工具欄、關閉按鈕、最小化按鈕、最大化按鈕等(可以理解為相當於瀏覽器的主頁)
控件:指按鈕、復選框、文本框、表格、進度條等這些組成程序的基本元素 。
窗口控件:是PyQt中建立界面的主要元素。在PyQt中把沒有嵌入到其他控件中的控件稱為窗口,一般窗口都有邊框、標題欄。
一個程序可以有多個窗口,一個窗口也可以有多個控件。
在PyQt中,有三個類都是用來創建窗口的,即QMainWindow, QWidget和QDialog,這些窗口可以直接調用,也可以繼承后再使用。
- 作為PyQt中的基本窗口控件之一,QMain Window主窗口為用戶提供了一個應用程序框架,它擁有自己的布局,可以在布局中添加不同的控件。QMain Window窗口可以包含菜單欄、工具欄、狀態欄、標題欄等。是比較常用的窗口形式,一般作為GUI的主窗口使用。
- 與之不同,QDialog是對話框窗口的基類。而對話框主要是用來執行短期任務,或者與用戶進行互動,既可以是模態的,也可以是非模態的。QDialog窗口沒有菜單欄、工具欄、狀態欄等。
- QWidget類窗口控件是所有用戶界面對象的基類,所有的窗口和控件都直接或者間接繼承自QWidget類。
因此,如果是主窗口,則使用QMain Window類;如果是對話框,則使用QDialog類;如果不確定,或者有可能作為頂層窗口,也有可能嵌入到其他窗口中,則使用QWidget類。
(2)創建窗口
父窗口:指一個窗口包含一個或多個窗口
子窗口:被包含的窗口
頂層窗口:沒有父窗口的窗口,QMain Window就是一個頂層窗口,它可以包含多個界面元素,如菜單欄、工具欄、狀態欄、子窗口等。
QMain Window繼承自QWidget類,擁有它的所有派生方法和屬性,其中比較重要的方法有:
1)addToolBar(): 表示添加工具欄
2)centralWidget():表示返回窗口中心的一個控件,未設置時返回NULL
3) menuBar():表示主窗口的菜單欄
4)setCentralWidget():表示設置窗口中心的控件
5) setStatusBar():表示設置狀態欄
6)StatusBar(): 表示獲得狀態欄對象后,調用狀態欄對象的showMessage顯示狀態欄信息。
需要注意的是:QMain Window不能設置布局,它有自己的布局方式。
(3)代碼展示
在下面的例子中,我們將創建窗口,顯示在屏幕中央,以及關閉主窗口寫在一起。
在創建好的窗口中,插入了一個Button控件,用來關閉當前窗口
# _*_ coding: UTF-8 _*_ # Author: liming import sys from PyQt5.QtWidgets import QMainWindow, QApplication, QDesktopWidget, QHBoxLayout, QPushButton, QWidget from PyQt5.QtGui import QIcon class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.resize(600, 300) # 設置窗口的大小 self.status = self.statusBar() # 狀態欄 self.status.showMessage('正在處理中......', 0) # 顯示狀態欄信息,默認為0(表示下一個操作前,一直顯示狀態欄;也可以設置顯示時間,單位為毫秒) self.setWindowTitle('PyQt MainWindow操作例子') # 設置該窗口的名稱 self.center() # 將窗口放在屏幕中央 self.button1 = QPushButton('關閉當前窗口!') # 創建一個按鈕,並賦予相應的文本 self.button1.clicked.connect(self.onButtonClick) # 關聯按鈕的點擊信號與onButtonClickx信號槽 layout = QHBoxLayout() # 設置水平布局 layout.addWidget(self.button1) # 水平布局應用到button1 main_frame = QWidget() main_frame.setLayout(layout) self.setCentralWidget(main_frame) # 設置窗口中心的控件 def center(self): screen = QDesktopWidget().screenGeometry() # 計算顯示屏幕的大小 size = self.geometry() # 用來獲取窗口的大小 self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2) # 將窗口移動到屏幕中央 def onButtonClick(self): sender = self.sender() # 發送信號的對象 print(sender.text() + '被按下了') qApp = QApplication.instance() qApp.quit() if __name__ == '__main__': app = QApplication(sys.argv) # 是PyQt的整個后台管理的命脈 app.setWindowIcon(QIcon('./images/cartoon1.ico')) # 設置窗口的頭標 form = MainWindow() # 調用MainWindow類,並進行顯示 form.show() sys.exit(app.exec_()) # 運行主循環,必須調用此函數才可以開始事件處理
結果
本部分完畢!