Python 当QListView与QSqlQueryModel一起使用时,如何更新它?
我正在从QSqlQuery模型实例化QListView,但在添加新项时,它会将其添加到数据库中,但不会将其添加到视图中,以下是我的代码Python 当QListView与QSqlQueryModel一起使用时,如何更新它?,python,qt,pyqt,pyqt5,pyside,Python,Qt,Pyqt,Pyqt5,Pyside,我正在从QSqlQuery模型实例化QListView,但在添加新项时,它会将其添加到数据库中,但不会将其添加到视图中,以下是我的代码 class MainWindow(QMainWindow): def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) self.setGeometry(900,180,800,600) se
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setGeometry(900,180,800,600)
self.setWindowTitle("Media Display")
self.setWindowIcon(QIcon('favicon.png'))
self.model = QSqlQueryModel()
self.model.setQuery("SELECT path FROM fichiers")
self.listview = QListView()
self.listview.setModel(self.model)
self.listview.setModelColumn(1)
def addImage(self):
fichier_base, _ = QFileDialog.getOpenFileName(self, 'select video', QDir.homePath(),"Images (*.png *.xpm *.jpg *.jpeg)")
query = QSqlQuery()
query.exec(
f"""INSERT INTO fichiers (path) VALUES ('{fichier_base}')"""
)
print('paaath', fichier_base)
self.model.layoutChanged.emit()
首先,不要使用f-string来创建查询,因为您的代码容易受到SQL注入的影响,而应该使用占位符。另一方面,QSqlQueryModel是一种读取模型,在建立查询时会重置该模型,因此一种可能的解决方案是再次建立查询:
def addImage(自):
fichier_base,QFileDialog.getOpenFileName(
self,“选择视频”,QDir.homePath(),“图像(*.png*.xpm*.jpg*.jpeg)”
)
如果不是fichier_基地:
返回
query=QSqlQuery()
query.prepare(““”插入fichiers(路径)值(?”)
query.addBindValue(fichier_base)
if query.exec_389;()
last_query=self.model.query().executedQuery()
self.model.setQuery(“”)
self.model.setQuery(最后一次查询)
其他:
打印(query.lastError().text())
非常感谢,它工作得很好:)