PyQt5實(shí)現(xiàn)數(shù)據(jù)的增刪改查功能詳解
通過這個(gè)布局思路來做一個(gè)簡(jiǎn)單的后臺(tái)管理系統(tǒng)也是OK的,大家可以參考一下啦!
話不多說,還是先來梳理一下需要的第三方模塊。
PyQ5 的UI界面布局部分,同樣是還是使用這三個(gè)模塊就夠了。
from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtCore import *
將sys模塊導(dǎo)入到代碼塊中,用于main函數(shù)里面的主體循環(huán)時(shí)使用。
import sys
add_dialog是一個(gè)自己寫的添加數(shù)據(jù)的彈框。
from add_dialog import AddDialog
創(chuàng)建好DataManage類,主要用來實(shí)現(xiàn)主窗口頁面的UI布局。
class DataManage(QWidget): def __init__(self): super(DataManage, self).__init__() self.data_list = [] self.init_ui() def init_ui(self): '''全局設(shè)置''' self.setWindowIcon(QIcon('數(shù)據(jù).ico')) self.setWindowTitle('數(shù)據(jù)管理器') self.resize(550, 400) grid = QGridLayout() '''菜單設(shè)置''' self.add_btn = QPushButton() self.add_btn.setText('添加數(shù)據(jù)') self.add_btn.clicked.connect(self.add_btn_click) self.del_btn = QPushButton() self.del_btn.setText('刪除數(shù)據(jù)') 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) '''數(shù)據(jù)列表設(shè)置''' self.data_table = QTableWidget() COLUMN = 5 ROW = 0 self.data_table.setColumnCount(COLUMN) self.data_table.setRowCount(ROW) h_table_header = ['序號(hào)', '姓名', '年齡', '班級(jí)', '表現(xiàn)'] 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)
定義需要的槽函數(shù),通過不同按鈕的信號(hào)綁定相應(yīng)的槽函數(shù)從而來實(shí)現(xiàn)該按鈕需要綁定的事件來實(shí)現(xiàn)業(yè)務(wù)邏輯。
# 將新增數(shù)據(jù)的按鈕綁定到該槽函數(shù) def add_btn_click(self): ''' 打開新增數(shù)據(jù)的彈框模塊 :return: ''' AddDialog.get_add_dialog(self) # 將查詢數(shù)據(jù)的按鈕綁定到該槽函數(shù) def query_data_list(self): ''' 查詢數(shù)據(jù)、并將數(shù)據(jù)展示到主窗口的數(shù)據(jù)列表中 :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]))) # 將刪除數(shù)據(jù)按鈕綁定到該槽函數(shù) def del_data_row(self): ''' 刪除某一行的數(shù)據(jù)信息 :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() 函數(shù)來啟動(dòng)整個(gè)應(yīng)用程序。
if __name__ == '__main__': app = QApplication(sys.argv) main = DataManage() main.show() sys.exit(app.exec_())
最后,將新增數(shù)據(jù)時(shí)自定義的彈框模塊的代碼分享一下。這個(gè)模塊就是為了自定彈框單獨(dú)寫的一個(gè)模塊,通過在主窗口直接調(diào)用該模塊實(shí)現(xiàn)的彈框函數(shù)就能實(shí)現(xiàn)一個(gè)彈框的功能。
創(chuàng)建一個(gè) 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('序號(hào):') self.seq_text = QLineEdit() self.seq_text.setPlaceholderText('請(qǐng)輸入序號(hào)') self.name_lab = QLabel() self.name_lab.setText('姓名:') self.name_text = QLineEdit() self.name_text.setPlaceholderText('請(qǐng)輸入姓名') self.age_lab = QLabel() self.age_lab.setText('年齡:') self.age_text = QLineEdit() self.age_text.setPlaceholderText('請(qǐng)輸入年齡') self.class_lab = QLabel() self.class_lab.setText('班級(jí):') self.class_text = QLineEdit() self.class_text.setPlaceholderText('請(qǐng)輸入班級(jí)') self.socre_lab = QLabel() self.socre_lab.setText('表現(xiàn):') self.socre_text = QLineEdit() self.socre_text.setPlaceholderText('請(qǐng)輸入表現(xiàn)') 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()
以上就是實(shí)現(xiàn)一個(gè)數(shù)據(jù)管理器需要的主要代碼塊了
到此這篇關(guān)于PyQt5實(shí)現(xiàn)數(shù)據(jù)的增刪改查功能詳解的文章就介紹到這了,更多相關(guān)PyQt5數(shù)據(jù)增刪改查內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python?open讀取文件內(nèi)容時(shí)的mode模式解析
這篇文章主要介紹了python?open讀取文件內(nèi)容時(shí)的mode模式解析,Python可以使用open函數(shù)來實(shí)現(xiàn)文件的打開,關(guān)閉,讀寫操作,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05Python如何使用struct.unpack處理二進(jìn)制文件
這篇文章主要介紹了Python如何使用struct.unpack處理二進(jìn)制文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Python兩臺(tái)電腦實(shí)現(xiàn)TCP通信的方法示例
這篇文章主要介紹了Python兩臺(tái)電腦實(shí)現(xiàn)TCP通信的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Python3讀取UTF-8文件及統(tǒng)計(jì)文件行數(shù)的方法
這篇文章主要介紹了Python3讀取UTF-8文件及統(tǒng)計(jì)文件行數(shù)的方法,涉及Python讀取指定編碼文件的相關(guān)技巧,需要的朋友可以參考下2015-05-05python manage.py runserver流程解析
這篇文章主要介紹了python manage.py runserver流程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11python返回?cái)?shù)組索引的方法實(shí)現(xiàn)
本文介紹了三種在Python中返回?cái)?shù)組索引的方法,主要包括index()方法,enumerate()方法及使用numpy庫(kù)的argwhere()函數(shù),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01pytorch 狀態(tài)字典:state_dict使用詳解
今天小編就為大家分享一篇pytorch 狀態(tài)字典:state_dict使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python新建項(xiàng)目自動(dòng)添加介紹和utf-8編碼的方法
這篇文章主要介紹了Python新建項(xiàng)目自動(dòng)添加介紹和utf-8編碼的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12