Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当QListView与QSqlQueryModel一起使用时,如何更新它?_Python_Qt_Pyqt_Pyqt5_Pyside - Fatal编程技术网

Python 当QListView与QSqlQueryModel一起使用时,如何更新它?

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

我正在从QSqlQuery模型实例化QListView,但在添加新项时,它会将其添加到数据库中,但不会将其添加到视图中,以下是我的代码

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())

非常感谢,它工作得很好:)