|
使用PyQt5制作界面,網(wǎng)上代碼漫天飛,但是實(shí)現(xiàn)界面與代碼分離的例子不多,自己實(shí)現(xiàn)了一個(gè),僥幸成功了,特此記錄,害怕自己忘記了,以后也是一個(gè)參考!
1.啟動(dòng)Pycharm,新建一個(gè)工程,然后點(diǎn)擊TOOL-->EXTERNAL TOOL選擇Qt Designer(這個(gè)菜單的配置,請(qǐng)參考另一篇博文:PyQt5的安裝),啟動(dòng)Qt Designer工具,制作界面。

在界面上放置了一個(gè)EditText,下面放置了兩個(gè)按鈕,一個(gè)按鈕是“打開(kāi)文件”,另一個(gè)按鈕是“保存文件”,功能很簡(jiǎn)單,就是點(diǎn)擊打開(kāi)文件,選擇一個(gè)txt文件,將里面的內(nèi)容顯示到EditText中,而且在界面設(shè)計(jì)的時(shí)候給QEditText設(shè)置對(duì)象名為txt_view,給打開(kāi)文件按鈕設(shè)置對(duì)象名為btn_open,另一個(gè)按鈕設(shè)置名稱(chēng)為btn_save。保存界面為mainUi.ui,在PyCharm界面中,在mainUi.ui文件上單擊鼠標(biāo)右鍵,選擇Extern tool工具中的PyUIC,將mainUI.ui轉(zhuǎn)換為mainUi.py
mainUi.py代碼如下:

mainUi.py代碼如下:
# Form implementation generated from reading ui file 'mainUi.ui' # Created by: PyQt5 UI code generator 5.10 # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(498, 430) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget) self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 501, 431)) self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setObjectName("verticalLayout") self.txt_view = QtWidgets.QTextEdit(self.verticalLayoutWidget) self.txt_view.setFont(font) self.txt_view.setObjectName("txt_view") self.verticalLayout.addWidget(self.txt_view) self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.btn_open = QtWidgets.QPushButton(self.verticalLayoutWidget) self.btn_open.setObjectName("btn_open") self.horizontalLayout_2.addWidget(self.btn_open) self.btn_save = QtWidgets.QPushButton(self.verticalLayoutWidget) self.btn_save.setObjectName("btn_save") self.horizontalLayout_2.addWidget(self.btn_save) self.verticalLayout.addLayout(self.horizontalLayout_2) MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.btn_open.setText(_translate("MainWindow", "打開(kāi)文件")) self.btn_save.setText(_translate("MainWindow", "保存文件"))
這些代碼都是自動(dòng)生成的,大家可以不需要?jiǎng)印?/code>
在生成的文件中有一個(gè)Ui_MainWindow類(lèi),這個(gè)類(lèi)繼承自object,這個(gè)類(lèi)就是一個(gè)空的類(lèi),里面什么都沒(méi)有,就是提供了一個(gè)容器,在容器內(nèi)部生成了一個(gè)名字叫MainWindow的對(duì)象,設(shè)置對(duì)象的大小,然后將這個(gè)對(duì)象MainWindow作為父類(lèi)生成了一個(gè)子對(duì)象centralwidget。centralwidget作為這個(gè)容器類(lèi)的內(nèi)部成員,這個(gè)對(duì)象centralwidget就是將來(lái)程序要運(yùn)行的主窗口,在這個(gè)窗口內(nèi)部放置了很多的控件,具體不詳細(xì)論述了。
函數(shù)retranslateUi(self, MainWindow)的主要作用是設(shè)置控件的各種屬性。
然后在Pycharm中添加一個(gè)新的py文件main.py,代碼如下:
from PyQt5.QtWidgets import QApplication,QMainWindow,QFileDialog class MainCode(QMainWindow,mainUi.Ui_MainWindow): QMainWindow.__init__(self) mainUi.Ui_MainWindow.__init__(self) self.btn_save.clicked.connect(self.on_save) self.btn_open.clicked.connect(self.on_open) FullFileName,_=QFileDialog.getSaveFileName (self, '文件另存為', r'./','TXT (*.txt)') set_text=self.txt_view.toPlainText() with open(FullFileName,'wt') as f: print(set_text, file = f) FullFileName, _ = QFileDialog.getOpenFileName(self, '打開(kāi)', r'./', 'TXT (*.txt)') with open(FullFileName, 'rt') as f: self.txt_view.setText(txtstr) app=QApplication(sys.argv)
MainCode類(lèi)又提供了一個(gè)容器,這個(gè)類(lèi)繼承自QMainWindow,mainUi.Ui_MainWindow,在這個(gè)類(lèi)的構(gòu)造函數(shù)中運(yùn)行類(lèi)父類(lèi)的構(gòu)造函數(shù),并且把它自己作為參數(shù)產(chǎn)地給setupUi,并且添加了信號(hào)&槽信息
self.btn_save.clicked.connect(self.on_save)
self.btn_open.clicked.connect(self.on_open)
這兩個(gè)語(yǔ)句使得信號(hào)與槽函數(shù)進(jìn)行手工綁定
函數(shù)
FullFileName,_=QFileDialog.getSaveFileName (self, '文件另存為', r'./','TXT (*.txt)') set_text=self.txt_view.toPlainText() with open(FullFileName,'wt') as f: print(set_text, file = f) FullFileName, _ = QFileDialog.getOpenFileName(self, '打開(kāi)', r'./', 'TXT (*.txt)') with open(FullFileName, 'rt') as f: self.txt_view.setText(txtstr)
是對(duì)按鈕的響應(yīng)函數(shù)
運(yùn)行main.py這個(gè)程序,界面

這樣在main.py文件中,沒(méi)有涉及任何界面中的內(nèi)容,開(kāi)發(fā)人員只需要自己綁定信號(hào)&槽,然后專(zhuān)心槽函數(shù)的邏輯關(guān)系就行了,實(shí)現(xiàn)了界面與代碼的分離。
|