gpt4 book ai didi

python - qt - 更改数据库时,pyqt QTableView 不填充

转载 作者:行者123 更新时间:2023-12-01 06:19:00 25 4
gpt4 key购买 nike

我试图允许我的用户选择要打开的数据库。每个数据库都将具有相同的架构。由于某种原因,我在打开数据库后无法填充 QTableView。

我正在解释示例代码,但这应该让您了解我正在尝试做什么。

作品:

class aMainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
QMainWindow.__init__(self)

self.db = QSqlDatabase.addDatabase("QSQLITE")

self.db.setDatabaseName('testdb.db')
self.db.open()

# Set up the user interface from Designer.
self.setupUi(self)

#self.db.setDatabaseName('testdb.db')

self.model = QSqlTableModel(self)
self.model.setTable("records")

self.model.setSort(FILEORDER, Qt.AscendingOrder)

self.model.setHeaderData(ID, Qt.Horizontal, QVariant("ID"))
self.model.setHeaderData(FILEORDER, Qt.Horizontal, QVariant("File Order"))
self.model.setHeaderData(RECORDTYPE, Qt.Horizontal, QVariant("Type"))
self.model.setHeaderData(NAME, Qt.Horizontal, QVariant("Name"))
self.model.setHeaderData(PRESORTNAME, Qt.Horizontal, QVariant("Presort Name"))
self.model.setHeaderData(RECORD, Qt.Horizontal, QVariant("Record"))
self.model.select()

self.tableView.setModel(self.model)
#self.view.setSelectionMode(QTableView.SingleSelection)
#self.view.setSelectionBehavior(QTableView.SelectRows)
self.tableView.setColumnHidden(ID, True)
self.tableView.setColumnHidden(PRESORTNAME, True)
self.tableView.setColumnHidden(RECORD, True)

不起作用:

class aMainWindow(QMainWindow, Ui_MainWindow):       
def __init__(self):
QMainWindow.__init__(self)

# Set up the user interface from Designer.
self.setupUi(self)

#self.db.setDatabaseName('testdb.db')

self.model = QSqlTableModel(self)
self.model.setTable("records")

self.model.setSort(FILEORDER, Qt.AscendingOrder)

self.model.setHeaderData(ID, Qt.Horizontal, QVariant("ID"))
self.model.setHeaderData(FILEORDER, Qt.Horizontal, QVariant("File Order"))
self.model.setHeaderData(RECORDTYPE, Qt.Horizontal, QVariant("Type"))
self.model.setHeaderData(NAME, Qt.Horizontal, QVariant("Name"))
self.model.setHeaderData(PRESORTNAME, Qt.Horizontal, QVariant("Presort Name"))
self.model.setHeaderData(RECORD, Qt.Horizontal, QVariant("Record"))
self.model.select()

self.tableView.setModel(self.model)
#self.view.setSelectionMode(QTableView.SingleSelection)
#self.view.setSelectionBehavior(QTableView.SelectRows)
self.tableView.setColumnHidden(ID, True)
self.tableView.setColumnHidden(PRESORTNAME, True)
self.tableView.setColumnHidden(RECORD, True)


#slot of the open db action
def on_actionOpen_DB_triggered(self, checked=None):
if checked is None: return
filename = QFileDialog.getOpenFileName(self, 'open a database',
'/home/',
"Databases (*.db)", #All Files (*.*)
"Databases (*.db)")
if not filename:
pass

self.db = QSqlDatabase.addDatabase("QSQLITE")


if self.db.isOpen():
sys.stdout.write('db still open?')

self.db.setDatabaseName(filename)
self.dbname = filename
self.db.open()
self.model.select()
#self.tableView.update()
if self.db.isOpen():
sys.stdout.write('db opened')

最佳答案

我今天不记得在哪里找到它,但当我研究其他东西时,我发现一些论坛帖子说必须在制作模型之前建立连接。我怀疑模型构造中一定有一些代码接触到数据库。我更改了 on_actionOpen_DB_triggered 以在建立连接后创建模型,并且效果很好。

关于python - qt - 更改数据库时,pyqt QTableView 不填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1659756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com