天天看點

pycharm配置pyqt5_PyQt5信号與槽機制進階(二)

Qt Desgner可視化設計窗體,窗體模闆主要包括以下3種:

1、Dialogm模闆,基于QDialog類的窗體,具有一般對話框的特性,如可以模态顯示、具有傳回值等。

2、Main Window子產品,基于QMainWindow類的窗體,具有主視窗的特性,視窗上有主菜單欄、工具欄、狀态欄等。

3、Widget模闆,基于QWidget類窗體。QWidget類是所有界面元件的基類,如QLabel、QPushButton等界面元件都是從QWidget類繼承而來的。QWidget類也是QDialog和QMainWindow的父類,基于QWidget類建立的窗體可以作為獨立的視窗運作,也可以嵌入其他界面元件内顯示。

pycharm配置pyqt5_PyQt5信号與槽機制進階(二)

    Qt Desgner提供基本的編輯信号和槽的方法。本次執行個體建立Widget模闆視窗,儲存命名為MainWinSignalSlog.ui,實作單擊關閉按鈕後關閉視窗。

    Buttons子產品中找到QPushButton控件拖入到窗體From中,屬性區域找到按鈕text屬性,屬性值改為"關閉視窗",将objectname屬性值改為"closeWinBtn"。單擊工具欄上的"編輯信号與槽",直接在"關閉視窗"按鈕上按住滑鼠左鍵不放,拖到彈出配置連接配接,看出按鈕控件會發射很多信号,選擇需要的即可。信号選擇單擊clicked(),槽函數選擇close(),點選ok建立連接配接。

pycharm配置pyqt5_PyQt5信号與槽機制進階(二)

    用以上方法建立信号與槽連接配接後,在UI工具右下側的信号與槽編輯視窗可對建立的關系進行調整。

pycharm配置pyqt5_PyQt5信号與槽機制進階(二)

    使用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程式架構,稍微修改,點選即可運作。

pycharm配置pyqt5_PyQt5信号與槽機制進階(二)