qtableview显示sqlite数据库里的数据,有一列是日期和时间,我希望对该列单元格双击时能跳出qdatetimeedit来快速修改它的值,并以正确的格式存入到数据库中,请帮我写个示例代码出来
时间: 2023-05-21 09:04:08 浏览: 343
好的,以下是示例代码:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView, QDateTimeEdit
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel
from PyQt5.QtCore import Qt, QModelIndex
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 连接数据库
db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('test.db')
db.open()
# 创建数据模型
self.model = QSqlTableModel()
self.model.setTable('mytable')
self.model.select()
# 创建表格视图
self.tableview = QTableView()
self.tableview.setModel(self.model)
# 为日期时间列添加双击事件
self.tableview.doubleClicked.connect(self.editDateTime)
# 设置主窗口布局
self.setCentralWidget(self.tableview)
def editDateTime(self, index: QModelIndex):
# 获取当前单元格的列名
column_name = self.model.headerData(index.column(), Qt.Horizontal)
# 如果是日期时间列
if column_name == 'datetime':
# 创建日期时间编辑器
datetime_edit = QDateTimeEdit()
datetime_edit.setDateTime(self.model.data(index, Qt.DisplayRole))
# 弹出编辑器
if datetime_edit.exec_():
# 获取编辑器的值
new_datetime = datetime_edit.dateTime().toString('yyyy-MM-dd hh:mm:ss')
# 更新数据模型
self.model.setData(index, new_datetime, Qt.EditRole)
self.model.submitAll()
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
这个示例代码演示了如何使用 PyQt5 和 QtSql 模块来显示 SQLite 数据库中的数据,并在日期时间列上添加双击事件,以便快速修改该列的值。在双击事件处理函数中,我们创建了一个 QDateTimeEdit 控件,并使用它来编辑日期时间值。最后,我们将新值保存回数据库中。
阅读全文