以下是一个使用PyQt6表格小部件编辑单元格数据并保存到数据库的示例代码:
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget, QPushButton
from PyQt6.QtSql import QSqlDatabase, QSqlQuery
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建数据库连接
self.db = QSqlDatabase.addDatabase('QSQLITE')
self.db.setDatabaseName('data.db')
if not self.db.open():
print('无法打开数据库连接')
sys.exit(1)
# 创建表格小部件
self.table_widget = QTableWidget()
self.setCentralWidget(self.table_widget)
self.table_widget.setColumnCount(2)
self.table_widget.setRowCount(5)
self.table_widget.setHorizontalHeaderLabels(['姓名', '年龄'])
# 添加数据到表格小部件
self.load_data()
# 创建保存按钮
save_button = QPushButton('保存')
save_button.clicked.connect(self.save_data)
# 创建布局并将表格小部件和按钮添加到布局
layout = QVBoxLayout()
layout.addWidget(self.table_widget)
layout.addWidget(save_button)
# 创建中心小部件并将布局添加到中心小部件
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
def load_data(self):
query = QSqlQuery()
query.exec_("SELECT * FROM students")
row = 0
while query.next():
name = query.value(0)
age = query.value(1)
item_name = QTableWidgetItem(name)
item_age = QTableWidgetItem(str(age))
self.table_widget.setItem(row, 0, item_name)
self.table_widget.setItem(row, 1, item_age)
row += 1
def save_data(self):
query = QSqlQuery()
query.exec_("DELETE FROM students")
for row in range(self.table_widget.rowCount()):
name = self.table_widget.item(row, 0).text()
age = int(self.table_widget.item(row, 1).text())
query.prepare("INSERT INTO students (name, age) VALUES (:name, :age)")
query.bindValue(":name", name)
query.bindValue(":age", age)
query.exec_()
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
这个示例中,我们首先创建了一个QMainWindow
窗口,然后在窗口中创建了一个QTableWidget
表格小部件和一个保存按钮。我们还创建了一个名为data.db
的SQLite数据库,并在其中创建了一个名为students
的表格,表格有两列:姓名和年龄。
在load_data
函数中,我们使用QSqlQuery
查询数据库中的数据,并将查询结果加载到表格小部件中。
在save_data
函数中,我们首先使用QSqlQuery
删除数据库中的所有数据,然后遍历表格小部件中的每一行,获取姓名和年龄,并使用QSqlQuery
将数据插入到数据库中。
最后,我们创建了一个QApplication
应用程序对象,创建了一个MainWindow
窗口对象,并显示窗口。应用程序进入事件循环,直到窗口关闭为止。