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 庫學習筆記