在pyqt中做可以增删改查的商品数据库的方式有什么?步骤是什么?给出一个有增删改查功能的商品数据库界面的完整代码
时间: 2024-03-03 20:49:27 浏览: 104
Python使用ODBC接口操作Access数据库mdb文件,增删改查,代码详细工整精炼,中文注释,方便单步调试通过,运行OK
在PyQt中实现可以增删改查的商品数据库的一种方式是使用Qt的数据库模块(QtSql)结合SQLite数据库完成。步骤如下:
1. 安装PyQt和SQLite数据库
在Python环境中使用pip安装PyQt和sqlite3模块:
```
pip install PyQt5
```
2. 创建SQLite数据库
使用SQLiteStudio或其他SQLite管理工具创建一个名为“goods.db”的数据库,其中包含一个名为“goods”的数据表,数据表包含以下字段:
```
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
price REAL NOT NULL,
quantity INTEGER NOT NULL
```
3. 设计GUI界面
使用Qt Designer设计一个GUI界面,包含以下控件:
- QLabel:显示标题和各个字段的标签
- QLineEdit:输入框,用于输入商品名称、价格、数量等信息
- QPushButton:按钮,用于执行增删改查操作
- QTableWidget:表格控件,用于显示数据库中的商品信息
4. 编写程序逻辑
在Python代码中实现以下操作:
- 连接SQLite数据库
- 实现增加、删除、修改、查询操作
- 将数据库中的数据显示在表格中
完整的代码如下:
```python
import sys
from PyQt5.QtSql import QSqlDatabase, QSqlQuery
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidgetItem
from PyQt5.QtGui import QIcon
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('商品数据库')
self.setWindowIcon(QIcon('icon.png'))
self.setGeometry(100, 100, 800, 600)
self.initUI()
def initUI(self):
self.labels = ['ID', '名称', '价格', '数量']
self.table = QTableWidget(self)
self.table.setRowCount(0)
self.table.setColumnCount(len(self.labels))
self.table.setHorizontalHeaderLabels(self.labels)
self.table.setGeometry(50, 50, 700, 400)
self.name_label = QLabel('名称', self)
self.name_label.setGeometry(50, 480, 50, 30)
self.name_edit = QLineEdit(self)
self.name_edit.setGeometry(120, 480, 150, 30)
self.price_label = QLabel('价格', self)
self.price_label.setGeometry(300, 480, 50, 30)
self.price_edit = QLineEdit(self)
self.price_edit.setGeometry(370, 480, 150, 30)
self.quantity_label = QLabel('数量', self)
self.quantity_label.setGeometry(550, 480, 50, 30)
self.quantity_edit = QLineEdit(self)
self.quantity_edit.setGeometry(620, 480, 150, 30)
self.add_button = QPushButton('增加', self)
self.add_button.setGeometry(50, 530, 100, 30)
self.add_button.clicked.connect(self.add_item)
self.delete_button = QPushButton('删除', self)
self.delete_button.setGeometry(200, 530, 100, 30)
self.delete_button.clicked.connect(self.delete_item)
self.update_button = QPushButton('修改', self)
self.update_button.setGeometry(350, 530, 100, 30)
self.update_button.clicked.connect(self.update_item)
self.search_button = QPushButton('查询', self)
self.search_button.setGeometry(500, 530, 100, 30)
self.search_button.clicked.connect(self.search_item)
self.show_table()
def show_table(self):
self.db = QSqlDatabase.addDatabase('QSQLITE')
self.db.setDatabaseName('goods.db')
self.db.open()
query = QSqlQuery()
query.exec_("SELECT * FROM goods")
row = 0
self.table.setRowCount(0)
while query.next():
self.table.insertRow(row)
for col in range(len(self.labels)):
item = QTableWidgetItem(str(query.value(col)))
self.table.setItem(row, col, item)
row += 1
def add_item(self):
name = self.name_edit.text()
price = self.price_edit.text()
quantity = self.quantity_edit.text()
query = QSqlQuery()
query.exec_("INSERT INTO goods (name, price, quantity) VALUES ('{}', '{}', '{}')".format(name, price, quantity))
self.show_table()
def delete_item(self):
selected = self.table.selectedIndexes()
if selected:
id = self.table.item(selected[0].row(), 0).text()
query = QSqlQuery()
query.exec_("DELETE FROM goods WHERE id={}".format(id))
self.show_table()
def update_item(self):
selected = self.table.selectedIndexes()
if selected:
id = self.table.item(selected[0].row(), 0).text()
name = self.name_edit.text()
price = self.price_edit.text()
quantity = self.quantity_edit.text()
query = QSqlQuery()
query.exec_("UPDATE goods SET name='{}', price='{}', quantity='{}' WHERE id={}".format(name, price, quantity, id))
self.show_table()
def search_item(self):
name = self.name_edit.text()
query = QSqlQuery()
query.exec_("SELECT * FROM goods WHERE name LIKE '%{}%'".format(name))
row = 0
self.table.setRowCount(0)
while query.next():
self.table.insertRow(row)
for col in range(len(self.labels)):
item = QTableWidgetItem(str(query.value(col)))
self.table.setItem(row, col, item)
row += 1
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
在程序中先定义了一个MainWindow类,继承自QMainWindow。在MainWindow类中,定义了GUI界面的各个控件,并且实现了增加、删除、修改、查询操作。在show_table()方法中,连接SQLite数据库,并且执行SELECT语句获取数据库中的数据,然后将数据显示在表格中。在add_item()、delete_item()、update_item()、search_item()方法中,通过QSqlQuery对象执行INSERT、DELETE、UPDATE、SELECT语句,实现增删改查操作。最后,在主程序中创建一个QApplication对象,并且创建一个MainWindow对象,调用show()方法显示GUI界面,调用app.exec_()方法进入消息循环。
阅读全文