用QT Designer設計python UI 程序的步驟

1.      設計UI界面

Qt Designer的保存路徑在

C:\Users\u0013662\AppData\Local\Programs\Python\Python36\Lib\site-packages\pyqt5-tools

打開QtDesigner,新建一個“Dialog Without Buttons”

從左側的WidgetBox拖入一個Label,一個Text和一個Button

 

文件保存爲test.ui

2.       使用pyuic5.ui文件轉換爲.py文件。

CMD窗口下執行命令:pyuic5 test.ui –o test.py

如果執行成功,在同目錄下生成test.py文件

內容如下:

from PyQt5 import QtCore, QtGui, QtWidgets

 

class Ui_Dialog(object):

    def setupUi(self, Dialog):

       Dialog.setObjectName("Dialog")

        Dialog.resize(400, 300)

        self.label = QtWidgets.QLabel(Dialog)

        self.label.setGeometry(QtCore.QRect(130,70, 81, 18))

       self.label.setObjectName("label")

        self.pushButton =QtWidgets.QPushButton(Dialog)

       self.pushButton.setGeometry(QtCore.QRect(140, 210, 112, 34))

       self.pushButton.setObjectName("pushButton")

        self.lineEdit =QtWidgets.QLineEdit(Dialog)

       self.lineEdit.setGeometry(QtCore.QRect(100, 130, 171, 41))

       self.lineEdit.setObjectName("lineEdit")

 

        self.retranslateUi(Dialog)

       QtCore.QMetaObject.connectSlotsByName(Dialog)

 

    def retranslateUi(self, Dialog):

        _translate =QtCore.QCoreApplication.translate

       Dialog.setWindowTitle(_translate("Dialog","Dialog"))

       self.label.setText(_translate("Dialog","TextLabel"))

       self.pushButton.setText(_translate("Dialog","PushButton"))

這個程序定義的是各個界面元素和它們的位置、名稱、標籤等信息,當然,Qt Designer也可以通過信號和槽的機制爲控件添加響應事件,在此文暫不介紹。

3.      編寫執行程序load.py

       import  sys

from test import *

fromPyQt5.QtWidgets import *

 

classMyWidgets(Ui_Dialog):

    def setupUi(self,Dialog):

        super().setupUi(Dialog)

       

        self.pushButton.clicked.connect(self.A)

       

    def A(self,Dialog):

        try:

            EditText=self.lineEdit.text()

            _translate =QtCore.QCoreApplication.translate

           self.label.setText(_translate("Dialog", EditText))

           

        except:

            print(sys.exc_info())

if__name__ == '__main__':

    app=QtWidgets.QApplication(sys.argv)

    Form=QtWidgets.QWidget()

    ui=MyWidgets()

    ui.setupUi(Form)

    Form.show()

    sys.exit(app.exec_())

  

這個程序新定義了一個類MyWidgetsMyWidgets繼承自test.py中的類Ui_Dialog,首先它重寫了setupUi方法,重寫這個方法是爲了爲Button綁定觸發事件,當然,它要先執行super().setupUi(Dialog)把父類的整個方法繼承過來,再加入self.pushButton.clicked.connect(self.A)用於綁定事件。A方法是MyWidgets的成員函數,具體實現按鈕動作。

if__name__ == '__main__':

    app=QtWidgets.QApplication(sys.argv)

    Form=QtWidgets.QWidget()

    ui=MyWidgets()

    ui.setupUi(Form)

    Form.show()

    sys.exit(app.exec_())

這段是程序執行的入口,由於MyWidgetssetupUi方法要求一個Dialog參數,因此Form=QtWidgets.QWidget()聲明一個Form, 再生成一個MyWidgets實例,執行SetupUi構造整個頁面,執行Form.show()顯示界面。

有一個問題,整個程序操作的是Object的子類Ui_Dialog,可爲什麼調用Formshow()來顯示界面呢?注意類似self.pushButton= QtWidgets.QPushButton(Dialog)聲明控件時總有一個參數Dialog,可以這樣理解,pushButtonUI­_Dialog的屬性,它指的是Dialog上的一個界面元素。這本身就是一個顯示和操作分離的邏輯。

4.      這可以作爲一個程序開發框架。

(1)      QT Desinger設計界面生成ui

(2)      pyuic5ui轉成界面py

(3)      編寫界面py的子類,在子類裏定義並綁定控件的動作

(4)      編寫程序執行入口,執行程序。

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章