Blogger Information
Blog 13
fans 0
comment 0
visits 10293
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
该怎么用pyqt5来实现数据的增、删、改、查功能
P粉962186587
Original
943 people have browsed it

通过这个布局思路来做一个简单的后台管理系统也是OK的,大家可以参考一下啦!

话不多说,还是先来梳理一下需要的第三方模块。

PyQ5 的UI界面布局部分,同样是还是使用这三个模块就够了。

  1. from PyQt5.QtGui import *
  2. from PyQt5.QtWidgets import *
  3. from PyQt5.QtCore import *

将sys模块导入到代码块中,用于main函数里面的主体循环时使用。

  1. import sys

add_dialog是一个自己写的添加数据的弹框。

  1. from add_dialog import AddDialog

创建好DataManage类,主要用来实现主窗口页面的UI布局。

  1. class DataManage(QWidget):
  2. def __init__(self):
  3. super(DataManage, self).__init__()
  4. self.data_list = []
  5. self.init_ui()
  6. def init_ui(self):
  7. '''全局设置'''
  8. self.setWindowIcon(QIcon('数据.ico'))
  9. self.setWindowTitle('数据管理器')
  10. self.resize(550, 400)
  11. grid = QGridLayout()
  12. '''菜单设置'''
  13. self.add_btn = QPushButton()
  14. self.add_btn.setText('添加数据')
  15. self.add_btn.clicked.connect(self.add_btn_click)
  16. self.del_btn = QPushButton()
  17. self.del_btn.setText('删除数据')
  18. self.del_btn.clicked.connect(self.del_data_row)
  19. self.query_btn = QPushButton()
  20. self.query_btn.setText('查询')
  21. self.query_btn.clicked.connect(self.query_data_list)
  22. '''数据列表设置'''
  23. self.data_table = QTableWidget()
  24. COLUMN = 5
  25. ROW = 0
  26. self.data_table.setColumnCount(COLUMN)
  27. self.data_table.setRowCount(ROW)
  28. h_table_header = ['序号', '姓名', '年龄', '班级', '表现']
  29. self.data_table.setHorizontalHeaderLabels(h_table_header)
  30. self.data_table.verticalHeader().setVisible(False)
  31. self.data_table.setShowGrid(True)
  32. self.data_table.setEditTriggers(QTableWidget.NoEditTriggers)
  33. self.data_table.setSelectionBehavior(QTableWidget.SelectRows)
  34. self.data_table.setSelectionMode(QTableWidget.SingleSelection)
  35. for index in range(self.data_table.columnCount()):
  36. headItem = self.data_table.horizontalHeaderItem(index)
  37. headItem.setTextAlignment(Qt.AlignVCenter)
  38. '''加入布局'''
  39. grid.addWidget(self.add_btn, 0, 0, 1, 1)
  40. grid.addWidget(self.del_btn, 0, 1, 1, 1)
  41. grid.addWidget(self.query_btn, 0, 2, 1, 1)
  42. grid.addWidget(self.data_table, 1, 0, 1, 3)
  43. self.setLayout(grid)

定义需要的槽函数,通过不同按钮的信号绑定相应的槽函数从而来实现该按钮需要绑定的事件来实现业务逻辑。

  1. # 将新增数据的按钮绑定到该槽函数
  2. def add_btn_click(self):
  3. '''
  4. 打开新增数据的弹框模块
  5. :return:
  6. '''
  7. AddDialog.get_add_dialog(self)
  8. # 将查询数据的按钮绑定到该槽函数
  9. def query_data_list(self):
  10. '''
  11. 查询数据、并将数据展示到主窗口的数据列表中
  12. :return:
  13. '''
  14. data = self.data_list
  15. if len(data) != 0 and len(data[0]) != 0:
  16. self.data_table.setRowCount(len(data))
  17. self.data_table.setColumnCount(len(data[0]))
  18. for i in range(len(data)):
  19. for j in range(len(data[0])):
  20. self.data_table.setItem(i, j, QTableWidgetItem(str(data[i][j])))
  21. # 将删除数据按钮绑定到该槽函数
  22. def del_data_row(self):
  23. '''
  24. 删除某一行的数据信息
  25. :return:
  26. '''
  27. row_select = self.data_table.selectedItems()
  28. print(row_select)
  29. if len(row_select) != 0:
  30. row = row_select[0].row()
  31. print(row)
  32. self.data_table.removeRow(row)
  33. del self.data_list[row]
  34. print(self.data_table)

通过 main() 函数来启动整个应用程序。

  1. if __name__ == '__main__':
  2. app = QApplication(sys.argv)
  3. main = DataManage()
  4. main.show()
  5. sys.exit(app.exec_())

最后,将新增数据时自定义的弹框模块的代码分享一下。这个模块就是为了自定弹框单独写的一个模块,通过在主窗口直接调用该模块实现的弹框函数就能实现一个弹框的功能。

创建一个 add_dialog.py 的文件,将下面的代码块放到里面即可。

  1. from PyQt5.QtWidgets import *
  2. class AddDialog(QDialog):
  3. def __init__(self, parent=None):
  4. super(AddDialog, self).__init__(parent)
  5. self.init_ui(parent)
  6. def init_ui(self,parent):
  7. '''水平布局'''
  8. hbox = QHBoxLayout()
  9. self.save_btn = QPushButton()
  10. self.save_btn.setText('保存')
  11. self.save_btn.clicked.connect(lambda :self.save_btn_click(parent))
  12. self.cancel_btn = QPushButton()
  13. self.cancel_btn.setText('取消')
  14. self.cancel_btn.clicked.connect(self.cancel_btn_click)
  15. hbox.addWidget(self.save_btn)
  16. hbox.addWidget(self.cancel_btn)
  17. '''表单布局'''
  18. fbox = QFormLayout()
  19. self.seq_lab = QLabel()
  20. self.seq_lab.setText('序号:')
  21. self.seq_text = QLineEdit()
  22. self.seq_text.setPlaceholderText('请输入序号')
  23. self.name_lab = QLabel()
  24. self.name_lab.setText('姓名:')
  25. self.name_text = QLineEdit()
  26. self.name_text.setPlaceholderText('请输入姓名')
  27. self.age_lab = QLabel()
  28. self.age_lab.setText('年龄:')
  29. self.age_text = QLineEdit()
  30. self.age_text.setPlaceholderText('请输入年龄')
  31. self.class_lab = QLabel()
  32. self.class_lab.setText('班级:')
  33. self.class_text = QLineEdit()
  34. self.class_text.setPlaceholderText('请输入班级')
  35. self.socre_lab = QLabel()
  36. self.socre_lab.setText('表现:')
  37. self.socre_text = QLineEdit()
  38. self.socre_text.setPlaceholderText('请输入表现')
  39. fbox.addRow(self.seq_lab,self.seq_text)
  40. fbox.addRow(self.name_lab, self.name_text)
  41. fbox.addRow(self.age_lab, self.age_text)
  42. fbox.addRow(self.class_lab, self.class_text)
  43. fbox.addRow(self.socre_lab, self.socre_text)
  44. vbox = QVBoxLayout()
  45. vbox.addLayout(fbox)
  46. vbox.addLayout(hbox)
  47. self.setLayout(vbox)
  48. def save_btn_click(self,parent):
  49. if self.seq_text.text().strip() != '' and self.name_text.text().strip() != '' \
  50. and self.age_text.text().strip() != ''and self.class_text.text().strip() != '' \
  51. and self.socre_text.text().strip() != '' :
  52. print(parent.data_list)
  53. data = [self.seq_text.text(),
  54. self.name_text.text(),
  55. self.age_text.text(),
  56. self.class_text.text(),
  57. self.socre_text.text()]
  58. parent.data_list.append(data)
  59. print(parent.data_list)
  60. parent.query_data_list()
  61. self.close()
  62. def cancel_btn_click(self):
  63. self.close()
  64. @staticmethod
  65. def get_add_dialog(parent=None):
  66. dialog = AddDialog(parent)
  67. return dialog.exec()

以上就是实现一个数据管理器需要的主要代码块了,如果有更好的方式或者疑问,欢迎在评论区留言讨论 ~

以上就是全部内容,学对大家学习有所帮助,

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post