Python GUI教程(七):轉換qt設計師的ui代碼為Python代碼

文章首發:zmister.com

本篇我們將會介紹到:

  • 查看qt設計師生成的UI代碼;
  • 通過pyuic5工具轉換qt設計師UI為Python代碼

查看qt設計師生成的UI文件

我們在qt設計師中設計好的GUI窗口都會被保存為.ui格式的文件。

實質上,.ui文件依然是文本格式文件,我們使用notepad++打開剛剛保存的.ui文件:

可以發現,.ui文件其實是一個xml文件,其通過不同的標籤來表示不同的窗口部件或是行為和信號槽的聲明和描述。

通過pyuic5轉換UI文件為Python文件

設計好的UI文件如何需要轉換為Python文件,該怎麼辦?畢竟我們需要使用Python來擴展GUI的功能。

我們可以使用PyQt自帶的pyuic5工具,對Qt設計師保存的.ui文件進行轉換。

pyuic5是一個命令行工具,直接在cmd命令行界面運行即可。下面我們使用pyuic5將剛剛保存的UI文件轉換問Python代碼:

運行之後,便會自動生成一個ui2py.py的python文件,我們打開看看:

from PyQt5 import QtCore, QtGui, QtWidgetsnnclass Ui_MainWindow(object):n def setupUi(self, MainWindow):n MainWindow.setObjectName("MainWindow")n MainWindow.resize(585, 477)n self.centralwidget = QtWidgets.QWidget(MainWindow)n self.centralwidget.setObjectName("centralwidget")n self.pushButton = QtWidgets.QPushButton(self.centralwidget)n self.pushButton.setGeometry(QtCore.QRect(170, 140, 75, 23))n self.pushButton.setObjectName("pushButton")n MainWindow.setCentralWidget(self.centralwidget)n self.menubar = QtWidgets.QMenuBar(MainWindow)n self.menubar.setGeometry(QtCore.QRect(0, 0, 585, 23))n self.menubar.setObjectName("menubar")n self.menu = QtWidgets.QMenu(self.menubar)n self.menu.setObjectName("menu")n MainWindow.setMenuBar(self.menubar)n self.statusbar = QtWidgets.QStatusBar(MainWindow)n self.statusbar.setObjectName("statusbar")n MainWindow.setStatusBar(self.statusbar)n self.actionMen1 = QtWidgets.QAction(MainWindow)n self.actionMen1.setObjectName("actionMen1")n self.actionMen2 = QtWidgets.QAction(MainWindow)n self.actionMen2.setObjectName("actionMen2")n self.menu.addAction(self.actionMen1)n self.menu.addSeparator()n self.menu.addAction(self.actionMen2)n self.menubar.addAction(self.menu.menuAction())nn self.retranslateUi(MainWindow)n QtCore.QMetaObject.connectSlotsByName(MainWindow)nn def retranslateUi(self, MainWindow):n _translate = QtCore.QCoreApplication.translaten MainWindow.setWindowTitle(_translate("MainWindow", "州的先生zmister.com PythonGUI教程"))n self.pushButton.setText(_translate("MainWindow", "PushButton"))n self.menu.setTitle(_translate("MainWindow", "文件"))n self.actionMen1.setText(_translate("MainWindow", "men1"))n self.actionMen2.setText(_translate("MainWindow", "men2"))nnnif __name__ == "__main__":n import sysn app = QtWidgets.QApplication(sys.argv)n MainWindow = QtWidgets.QMainWindow()n ui = Ui_MainWindow()n ui.setupUi(MainWindow)n MainWindow.show()n sys.exit(app.exec_())n

生成的是標準的Python代碼,運行一下,看看是否和qt設計師中的一致:

嗯,並無區別。

修改信號槽

除了直接使用UI文件轉換而來的PythonGUI代碼,我們有時候也需要對部分事件進行修改。

我們可以在qt設計師中添加簡單的信號槽,複製的信號槽還是得自己在python代碼中定義。

首先,我們在窗口中添加一個label標籤,設置一個信號槽為:點擊按鈕的時候,label標籤就清空。

然後使用pyuic5將其轉換為Python代碼,運行正常,按鈕的信號槽也正常:

下面,我們並不想在點擊button按鈕的時候label標籤消失,而是換一個文字。我們該怎麼做呢?

直接在Python代碼中進行修改,添加一個方法,並連接到信號槽上:

現在點擊按鈕之後,label標籤會變為「zmister」而不是像之前那樣清空。

原文鏈接:Python GUI教程(七):轉換qt設計師的ui代碼為Python代碼


推薦閱讀:

python多進程進程間通信疑問,求大神指教?(主進程獲取不到子進程變數)
Python程序中不同的重啟機制
使用vs code進行Python編程,如何進行input輸入?
為什麼Sublime Text不支持Python交互?

TAG:编程 | 程序设计语言设计 | Python |