python3+PyQt5 数据库编程--增删改
2017-12-06 17:42
603 查看
http://blog.csdn.net/xiaoyangyang20/article/details/70240690
python3+PyQt5 数据库编程--增删改
原创 2017年04月19日 14:46:46标签:
python/
pyqt
本文通过python3+pyqt5改写实现了python Qt gui 编程变成15章的excise例子。
#!/usr/bin/env python3 import os import sys from PyQt5.QtCore import (QFile, QVariant, Qt) from PyQt5.QtWidgets import (QApplication, QDialog, QDialogButtonBox, QMenu, QMessageBox, QTableView, QVBoxLayout) from PyQt5.QtSql import (QSqlDatabase, QSqlQuery, QSqlTableModel) MAC = True try: from PyQt5.QtGui import qt_mac_set_native_menubar except ImportError: MAC = False ID, CATEGORY, SHORTDESC, LONGDESC = range(4) class ReferenceDataDlg(QDialog): def __init__(self, parent=None): super(ReferenceDataDlg, self).__init__(parent) self.model = QSqlTableModel(self) self.model.setTable("reference") self.model.setSort(ID, Qt.AscendingOrder) self.model.setHeaderData(ID, Qt.Horizontal, "ID") self.model.setHeaderData(CATEGORY, Qt.Horizontal,"Category") self.model.setHeaderData(SHORTDESC, Qt.Horizontal,"Short Desc.") self.model.setHeaderData(LONGDESC, Qt.Horizontal,"Long Desc.") self.model.select() self.view = QTableView() self.view.setModel(self.model) self.view.setSelectionMode(QTableView.SingleSelection) self.view.setSelectionBehavior(QTableView.SelectRows) self.view.setColumnHidden(ID, True) self.view.resizeColumnsToContents() buttonBox = QDialogButtonBox() addButton = buttonBox.addButton("&Add", QDialogButtonBox.ActionRole) deleteButton = buttonBox.addButton("&Delete", QDialogButtonBox.ActionRole) sortButton = buttonBox.addButton("&Sort", QDialogButtonBox.ActionRole) if not MAC: addButton.setFocusPolicy(Qt.NoFocus) deleteButton.setFocusPolicy(Qt.NoFocus) sortButton.setFocusPolicy(Qt.NoFocus) menu = QMenu(self) sortByCategoryAction = menu.addAction("Sort by &Category") sortByDescriptionAction = menu.addAction("Sort by &Description") sortByIDAction = menu.addAction("Sort by &ID") sortButton.setMenu(menu) closeButton = buttonBox.addButton(QDialogButtonBox.Close) layout = QVBoxLayout() layout.addWidget(self.view) layout.addWidget(buttonBox) self.setLayout(layout) addButton.clicked.connect(self.addRecord) deleteButton.clicked.connect(self.deleteRecord) sortByCategoryAction.triggered.connect(lambda:self.sort(CATEGORY)) sortByDescriptionAction.triggered.connect(lambda:self.sort(SHORTDESC)) sortByIDAction.triggered.connect(lambda:self.sort(ID)) closeButton.clicked.connect(self.accept) self.setWindowTitle("Reference Data") def addRecord(self): row = self.model.rowCount() self.model.insertRow(row) index = self.model.index(row, CATEGORY) self.view.setCurrentIndex(index) self.view.edit(index) def deleteRecord(self): index = self.view.currentIndex() if not index.isValid(): return record = self.model.record(index.row()) category = record.value(CATEGORY) desc = record.value(SHORTDESC) if (QMessageBox.question(self, "Reference Data", ("Delete {0} from category {1}?" .format(desc,category)), QMessageBox.Yes|QMessageBox.No) == QMessageBox.No): return self.model.removeRow(index.row()) self.model.submitAll() self.model.select() def sort(self, column): self.model.setSort(column, Qt.AscendingOrder) self.model.select() def main(): app = QApplication(sys.argv) filename = os.path.join(os.path.dirname(__file__), "reference.db") create = not QFile.exists(filename) db = QSqlDatabase.addDatabase("QSQLITE") db.setDatabaseName(filename) if not db.open(): QMessageBox.warning(None, "Reference Data", "Database Error: {0}".format(db.lastError().text())) sys.exit(1) if create: query = QSqlQuery() query.exec_("""CREATE TABLE reference ( id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, category VARCHAR(30) NOT NULL, shortdesc VARCHAR(20) NOT NULL, longdesc VARCHAR(80))""") form = ReferenceDataDlg() form.show() sys.exit(app.exec_()) main()1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
运行结果:
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- python3+PyQt5 数据库编程--增删改
- 用PYTHON进行数据库编程
- python的gui编程 最佳组合工具pyqt最新版+eric最新版
- Python实现数据库编程方法详解
- python(十) 数据库编程
- Python实现数据库编程方法详解
- python 教程 第二十章、 数据库编程
- python数据库编程之mysql篇
- Python 2.7 GUI 编程集成开发环境的搭建 Python 2.7 + PyQt 4 + Eric 6 环境搭建
- Python模拟Web Fetion给好友发送信息(数据库编程模块)
- 【脚本语言系列】关于Python数据库编程ODBC,你需要知道的事
- python核心编程学习笔记-2016-09-18-01-数据库编程(三)
- Python 2.7 GUI 编程集成开发环境的搭建 Python 2.7 + PyQt 4 + Eric 6 环境搭建
- python3+PyQt5 使用数据库窗口视图
- python数据库编程(2) 游标对象cursor
- Python学习系列(七)( 数据库编程)
- Python数据库(MySQL、MongoDB、Redis)编程
- 1.23python 网络通信编程与数据库
- 【实例】 python数据库编程
- python基本知识、数据库、网络、编程等总结