Qt Desgner可視化設計窗體,窗體模闆主要包括以下3種:
1、Dialogm模闆,基于QDialog類的窗體,具有一般對話框的特性,如可以模态顯示、具有傳回值等。
2、Main Window子產品,基于QMainWindow類的窗體,具有主視窗的特性,視窗上有主菜單欄、工具欄、狀态欄等。
3、Widget模闆,基于QWidget類窗體。QWidget類是所有界面元件的基類,如QLabel、QPushButton等界面元件都是從QWidget類繼承而來的。QWidget類也是QDialog和QMainWindow的父類,基于QWidget類建立的窗體可以作為獨立的視窗運作,也可以嵌入其他界面元件内顯示。
Qt Desgner提供基本的編輯信号和槽的方法。本次執行個體建立Widget模闆視窗,儲存命名為MainWinSignalSlog.ui,實作單擊關閉按鈕後關閉視窗。
Buttons子產品中找到QPushButton控件拖入到窗體From中,屬性區域找到按鈕text屬性,屬性值改為"關閉視窗",将objectname屬性值改為"closeWinBtn"。單擊工具欄上的"編輯信号與槽",直接在"關閉視窗"按鈕上按住滑鼠左鍵不放,拖到彈出配置連接配接,看出按鈕控件會發射很多信号,選擇需要的即可。信号選擇單擊clicked(),槽函數選擇close(),點選ok建立連接配接。
用以上方法建立信号與槽連接配接後,在UI工具右下側的信号與槽編輯視窗可對建立的關系進行調整。
使用UI Designer設計好的窗體儲存為MainWinSignalSlog.ui後,如要在python中使用這個窗體,需要使用PyQt5的工具pyuic5.exe将界面檔案轉換為Python檔案。
1、在windows的cmd視窗中用cd切換到檔案MainWinSignalSlog.ui儲存目錄位置,直接執行pyuic5 -o ui_MainWinSignalSlog.py MainWinSignalSlog.ui,編譯輸出的檔案名可任意指定。
2、也可以建立一個uic.bat儲存到項目檔案夾下,bat檔案是windows的批處理檔案,将以上指令儲存到txt文本修改字尾為.bat。
3、也可以在 Pycharm 中配置 External Tools
編譯後在MainWinSignalSlog.ui檔案所在的目錄下輸出ui_MainWinSignalSlog.py,内容如下:
界面檔案定義了一個類Ui_closeWinBtn,其父類是object,不是QWidget,定義一個函數setupUi(),傳入參數兩個,self是函數自己,closeWinBtn是傳入的參數,另外retranslateUi()函數設定窗體的标題、标簽文字等。
編譯轉換後,就可以用Ui_closeWinBtn類來建立GUI應用程式。以下代碼完成了點選按鈕關閉視窗的功能實作。
#0、面向過程版本
from PyQt5 import QtWidgets
import sys
import ui_MainWinSignalSlog
#1、建立一個應用程式對象。
app=QtWidgets.QApplication(sys.argv)
#2、控件的操作
#建立控件
window=QtWidgets.QWidget()
ui=ui_MainWinSignalSlog.Ui_closeWinBtn()
ui.setupUi(window) #調用Ui_closeWinBtn()類中setupUi()函數,建立窗體上其他元件,以window作為傳遞參數,建完整窗體
#設定控件(大小、位置、樣式...)
window.setWindowTitle("")
window.resize(500,500)
window.move(400,200)
#展示控件
window.show()
#3、應用程式的執行,進入到消息循環
sys.exit(app.exec_())
#界面與邏輯分離的GUI程式架構
from PyQt5.Qt import *
from ui_MainWinSignalSlog import Ui_closeWinBtn
class Window(QWidget):
def __init__(self,parent=None):
super().__init__(parent) #調用父類構造函數,建立QWidget窗體
self.__ui=Ui_closeWinBtn() #建立UI對象
self.__ui.setupUi(self) #構造UI
# 設定控件(大小、位置、樣式...)
# self.setWindowTitle("")
self.resize(600,400)
self.move(400,200)
self.setup_ui()
def setup_ui(self):
# 子控件設定
label = QLabel(self)
label.setText("Python資料分析執行個體")
label.move(200,200)
if __name__ == '__main__':
import sys
#1、建立一個應用程式對象
app=QApplication(sys.argv)
#2、控件的操作
#建立控件
window=Window()
#展示控件
window.show()
#3、應用程式的執行,進入到消息循環
sys.exit(app.exec_())
也可以一個信号觸發多個槽函數。同理UI 工具設計布局(界面),建立信号與槽關系,轉換為.py檔案
再次利用界面與邏輯分離的GUI程式架構,稍微修改,點選即可運作。