該怎麼用pyqt5來實現資料的增、刪、改、查功能...
阿新 • • 發佈:2022-03-17
通過這個佈局思路來做一個簡單的後臺管理系統也是OK的,大家可以參考一下啦!
話不多說,還是先來梳理一下需要的第三方模組。
PyQ5 的UI介面佈局部分,同樣是還是使用這三個模組就夠了。
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
將sys模組匯入到程式碼塊中,用於main函式裡面的主體迴圈時使用。
import sys
add_dialog是一個自己寫的新增資料的彈框。
from add_dialog import AddDialog
建立好DataManage類,主要用來實現主視窗頁面的UI佈局。
class DataManage(QWidget): def __init__(self): super(DataManage, self).__init__() self.data_list = [] self.init_ui() def init_ui(self): '''全域性設定''' self.setWindowIcon(QIcon('資料.ico')) self.setWindowTitle('資料管理器') self.resize(550, 400) grid = QGridLayout() '''選單設定''' self.add_btn = QPushButton() self.add_btn.setText('新增資料') self.add_btn.clicked.connect(self.add_btn_click) self.del_btn = QPushButton() self.del_btn.setText('刪除資料') self.del_btn.clicked.connect(self.del_data_row) self.query_btn = QPushButton() self.query_btn.setText('查詢') self.query_btn.clicked.connect(self.query_data_list) '''資料列表設定''' self.data_table = QTableWidget() COLUMN = 5 ROW = 0 self.data_table.setColumnCount(COLUMN) self.data_table.setRowCount(ROW) h_table_header = ['序號', '姓名', '年齡', '班級', '表現'] self.data_table.setHorizontalHeaderLabels(h_table_header) self.data_table.verticalHeader().setVisible(False) self.data_table.setShowGrid(True) self.data_table.setEditTriggers(QTableWidget.NoEditTriggers) self.data_table.setSelectionBehavior(QTableWidget.SelectRows) self.data_table.setSelectionMode(QTableWidget.SingleSelection) for index in range(self.data_table.columnCount()): headItem = self.data_table.horizontalHeaderItem(index) headItem.setTextAlignment(Qt.AlignVCenter) '''加入佈局''' grid.addWidget(self.add_btn, 0, 0, 1, 1) grid.addWidget(self.del_btn, 0, 1, 1, 1) grid.addWidget(self.query_btn, 0, 2, 1, 1) grid.addWidget(self.data_table, 1, 0, 1, 3) self.setLayout(grid)
定義需要的槽函式,通過不同按鈕的訊號繫結相應的槽函式從而來實現該按鈕需要繫結的事件來實現業務邏輯。
# 將新增資料的按鈕繫結到該槽函式 def add_btn_click(self): ''' 開啟新增資料的彈框模組 :return: ''' AddDialog.get_add_dialog(self) # 將查詢資料的按鈕繫結到該槽函式 def query_data_list(self): ''' 查詢資料、並將資料展示到主視窗的資料列表中 :return: ''' data = self.data_list if len(data) != 0 and len(data[0]) != 0: self.data_table.setRowCount(len(data)) self.data_table.setColumnCount(len(data[0])) for i in range(len(data)): for j in range(len(data[0])): self.data_table.setItem(i, j, QTableWidgetItem(str(data[i][j]))) # 將刪除資料按鈕繫結到該槽函式 def del_data_row(self): ''' 刪除某一行的資料資訊 :return: ''' row_select = self.data_table.selectedItems() print(row_select) if len(row_select) != 0: row = row_select[0].row() print(row) self.data_table.removeRow(row) del self.data_list[row] print(self.data_table)
通過 main() 函式來啟動整個應用程式。
if __name__ == '__main__':
app = QApplication(sys.argv)
main = DataManage()
main.show()
sys.exit(app.exec_())
最後,將新增資料時自定義的彈框模組的程式碼分享一下。這個模組就是為了自定彈框單獨寫的一個模組,通過在主視窗直接呼叫該模組實現的彈框函式就能實現一個彈框的功能。
建立一個 add_dialog.py 的檔案,將下面的程式碼塊放到裡面即可。
from PyQt5.QtWidgets import *
class AddDialog(QDialog):
def __init__(self, parent=None):
super(AddDialog, self).__init__(parent)
self.init_ui(parent)
def init_ui(self,parent):
'''水平佈局'''
hbox = QHBoxLayout()
self.save_btn = QPushButton()
self.save_btn.setText('儲存')
self.save_btn.clicked.connect(lambda :self.save_btn_click(parent))
self.cancel_btn = QPushButton()
self.cancel_btn.setText('取消')
self.cancel_btn.clicked.connect(self.cancel_btn_click)
hbox.addWidget(self.save_btn)
hbox.addWidget(self.cancel_btn)
'''表單佈局'''
fbox = QFormLayout()
self.seq_lab = QLabel()
self.seq_lab.setText('序號:')
self.seq_text = QLineEdit()
self.seq_text.setPlaceholderText('請輸入序號')
self.name_lab = QLabel()
self.name_lab.setText('姓名:')
self.name_text = QLineEdit()
self.name_text.setPlaceholderText('請輸入姓名')
self.age_lab = QLabel()
self.age_lab.setText('年齡:')
self.age_text = QLineEdit()
self.age_text.setPlaceholderText('請輸入年齡')
self.class_lab = QLabel()
self.class_lab.setText('班級:')
self.class_text = QLineEdit()
self.class_text.setPlaceholderText('請輸入班級')
self.socre_lab = QLabel()
self.socre_lab.setText('表現:')
self.socre_text = QLineEdit()
self.socre_text.setPlaceholderText('請輸入表現')
fbox.addRow(self.seq_lab,self.seq_text)
fbox.addRow(self.name_lab, self.name_text)
fbox.addRow(self.age_lab, self.age_text)
fbox.addRow(self.class_lab, self.class_text)
fbox.addRow(self.socre_lab, self.socre_text)
vbox = QVBoxLayout()
vbox.addLayout(fbox)
vbox.addLayout(hbox)
self.setLayout(vbox)
def save_btn_click(self,parent):
if self.seq_text.text().strip() != '' and self.name_text.text().strip() != '' \
and self.age_text.text().strip() != ''and self.class_text.text().strip() != '' \
and self.socre_text.text().strip() != '' :
print(parent.data_list)
data = [self.seq_text.text(),
self.name_text.text(),
self.age_text.text(),
self.class_text.text(),
self.socre_text.text()]
parent.data_list.append(data)
print(parent.data_list)
parent.query_data_list()
self.close()
def cancel_btn_click(self):
self.close()
@staticmethod
def get_add_dialog(parent=None):
dialog = AddDialog(parent)
return dialog.exec()
以上就是實現一個數據管理器需要的主要程式碼塊了,如果有更好的方式或者疑問,歡迎在評論區留言討論 ~
【往期精彩】
介紹一個文字語音神器,幾行程式碼就能搞定!
python批量自動整理檔案
初學者福利:分享五個免費的 Python 學習網站,抓緊收藏吧!
有趣的控制檯玩法:一行程式碼繪製控制檯影象!
資料處理小工具:Excel 批量資料檔案拆分/整合器...
辦公自動化:PDF檔案合併器,將多個PDF檔案進行合併...
GUI猜數字遊戲,直接開玩...
手把手教你做一個數據圖表生成器(附原始碼)...
動態指標時鐘:利用pyqt5製作指標鐘錶顯示實時時間
python 日誌中最亮的仔,是喜歡的花裡胡哨吖...
哈撒給,英雄聯盟全面板下載器來了...
剛剛出爐的冬奧會吉祥物:冰墩墩,附原始碼...