Python GUI教程(九):從UI文件中解耦Python代碼

文章首發:Python GUI教程(九):從UI文件中解耦Python代碼

本篇將會涉及:

  • 通過Qt設計師創建一個GUI
  • 添加數個窗口部件到GUI
  • 轉換UI代碼為Python代碼
  • 創建一個單獨的Python模塊來控制GUI窗口部件

在之前的文章中,我們適用Qt設計師創建了很多GUI窗口,這些窗口都是界面與邏輯都在一個文件裡面。如果GUI程序邏輯簡單,倒也沒什麼問題,如果窗口中部件的邏輯過多,就不便於管理。

在實際的開發中,我們通常將代碼分為界面代碼和邏輯代碼,界面與邏輯分離。下面我們將演示一下在Qt設計師創建的GUI中,解耦邏輯代碼。

一、使用Qt設計師創建一個GUI

首先,我們創建一個主窗口:

然後,在主窗口中添加一個Table Widgets表格控制項:

在主窗口中添加兩個水平布局的按鈕:

然後將窗口中的部件進行垂直布局:

基本的結構搭建好了,我們在表格部件中添加行和列:

添加好行和列之後,我們可以在表格控制項中右擊滑鼠,選擇「編輯項目」對行和列進行編輯:

這樣就完成了窗口界面的布局。

二、將UI文件轉為Python文件

我們沒有使用Qt設計師進行任何的邏輯性操作,只是創建了一個基本的窗口布局,現在使用pyuic5將其轉化為Python文件。

轉換成的Python文件運行正常:

三、解耦Python邏輯代碼

接下來通過Python模塊對UI的主窗口進行邏輯的編輯。

我們新建一個Python文件,引入這個GUI窗口,運行的結果和直接運行那個主文件是一樣的。

from GUI import nullwindownfrom PyQt5 import QtCore,QtWidgets,QtGuinnif __name__ == __main__:n import sysn app = QtWidgets.QApplication(sys.argv)n MainWindow = QtWidgets.QMainWindow()n ui = nullwindow.Ui_MainWindow()n ui.setupUi(MainWindow)n MainWindow.show()n sys.exit(app.exec_())n n

接著,我們在新建的decouple_window.py文件中對窗口的表格添加默認值:

from GUI import nullwindownfrom PyQt5 import QtCore,QtWidgets,QtGuinnif __name__ == __main__:n import sysn app = QtWidgets.QApplication(sys.argv)n MainWindow = QtWidgets.QMainWindow()n ui = nullwindow.Ui_MainWindow()n ui.setupUi(MainWindow)n n ui.tableWidget.setItem(0 , 0, QtWidgets.QTableWidgetItem("數據1"))n ui.tableWidget.setItem(1 , 1, QtWidgets.QTableWidgetItem("數據2"))n ui.tableWidget.setItem(2 , 2, QtWidgets.QTableWidgetItem("數據3"))nn MainWindow.show()n sys.exit(app.exec_())n n

這樣我們就在表格中設置了三個默認數據,現在的設置是直接在主循環中寫死的,我們可以新建一個方法,將設置數據的代碼放置其中:

from GUI import nullwindownfrom PyQt5 import QtCore,QtWidgets,QtGuinndef set_table_item():n ui.tableWidget.setItem(0 , 0, QtWidgets.QTableWidgetItem("數據1"))n ui.tableWidget.setItem(1 , 1, QtWidgets.QTableWidgetItem("數據2"))n ui.tableWidget.setItem(2 , 2, QtWidgets.QTableWidgetItem("數據3"))nnif __name__ == __main__:n import sysn app = QtWidgets.QApplication(sys.argv)n MainWindow = QtWidgets.QMainWindow()n ui = nullwindow.Ui_MainWindow()n ui.setupUi(MainWindow)nn set_table_item()nn MainWindow.show()n sys.exit(app.exec_())n n

除了設置數據,我們還可以為按鈕添加一個信號槽,當按鈕點擊的時候,按鈕的文本進行改變:

from GUI import nullwindownfrom PyQt5 import QtCore,QtWidgets,QtGuinndef set_table_item():n ui.tableWidget.setItem(0 , 0, QtWidgets.QTableWidgetItem("數據1"))n ui.tableWidget.setItem(1 , 1, QtWidgets.QTableWidgetItem("數據2"))n ui.tableWidget.setItem(2 , 2, QtWidgets.QTableWidgetItem("數據3"))nndef button_clicked():n ui.pushButton.setText("按鈕被點擊")nnif __name__ == __main__:n import sysn app = QtWidgets.QApplication(sys.argv)n MainWindow = QtWidgets.QMainWindow()n ui = nullwindow.Ui_MainWindow()n ui.setupUi(MainWindow)nn # 調用函數n set_table_item()n ui.pushButton.clicked.connect(button_clicked)nn MainWindow.show()n sys.exit(app.exec_())n n

因為有了邏輯函數,我們的信號槽能夠綁定和調用的部件就可以是多種多樣的,下面我們就演點擊按鈕,按鈕和表格中的文字都進行改變。

from GUI import nullwindownfrom PyQt5 import QtCore,QtWidgets,QtGuinndef set_table_item(item1=數據1,item2=數據2,item3=數據3):n ui.tableWidget.setItem(0 , 0, QtWidgets.QTableWidgetItem(item1))n ui.tableWidget.setItem(1 , 1, QtWidgets.QTableWidgetItem(item2))n ui.tableWidget.setItem(2 , 2, QtWidgets.QTableWidgetItem(item3))nndef button_clicked():n ui.pushButton.setText("按鈕被點擊")n set_table_item(item2=數據2被改變)nnif __name__ == __main__:n import sysn app = QtWidgets.QApplication(sys.argv)n MainWindow = QtWidgets.QMainWindow()n ui = nullwindow.Ui_MainWindow()n ui.setupUi(MainWindow)nn # 調用函數n set_table_item()n ui.pushButton.clicked.connect(button_clicked)n MainWindow.show()n sys.exit(app.exec_())n n


推薦閱讀:

黃哥教Python初學者如何調試錯誤。
計算機視覺 | Python OpenCV 3 使用背景減除進行目標檢測
python爬蟲之豆瓣音樂top250
Requests 庫學習筆記

TAG:Python | 编程 | GUI设计 |