qtableview 查询_qtableview从查询中添加行并在python中编辑它们

本文档描述了在Python2.7和Qt4环境中,使用QTableView显示和编辑从MariaDB查询结果的问题。作者遇到QSqlQueryModel只读问题,然后尝试使用QSqlTableModel,并展示了一个初始化Model的示例,但遇到了setQuery方法的类型错误。讨论了如何显示和隐藏QTableView的列,以及如何在不使用数组的情况下查询并编辑SQL表中的数据。
摘要由CSDN通过智能技术生成

我使用python2.7、MariaDB和Qt4。我有一个表,我想在其中插入查询中的行。我尝试了self.model = QtSql.QSqlQueryModel(),但我发现这是只读的。然后我换了别的地方。在

我的Model()类如下所示:class Model(QAbstractTableModel):

def __init__(self, parent=None, *args):

QAbstractTableModel.__init__(self, parent, *args)

query = QtSql.QSqlQuery()

query.prepare("SELECT denumire,pret_in,pret_out,cantitate,unitate_masura,tax FROM produse WHERE denumire='"+str(self.run_denumire())+"';")

query.exec_()

while(query.next()):

nume_produs = str(query.value(0).toString())

pret_in = str(query.value(1).toString())

pret_out = str(query.value(2).toString())

cantitate = str(query.value(3).toString())

unitate_masura = str(query.value(4).toString())

tax_tva = str(query.value(5).toString())

self.items = [nume_produs,pret_in,pret_out,cantitate,unitate_masura]

def rowCount(self, parent=QModelIndex()):

return 1

def columnCount(self, parent=QModelIndex()):

return len(self.items)

def data(self, index, role):

if not index.isValid(): return QVariant()

elif role != Qt.DisplayRole:

return QVariant()

column=index.column()

if column

return QVariant(self.items[column])

else:

return QVariant()

def flags(self, index):

return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsEditable

我是Qt新手,不知道如何逐个插入行以显示在表中。你在这里看到的是我在stackoverflow上找到的一个代码,我用一个查询修改了它。我需要一些帮助。在

我的主要代码如下:

^{pr2}$

我的ui文件是:file

文件由Qt Designer生成。

谢谢您。在

更新1:

我在class dialog_receptie中插入了一个函数。看起来像这样:def show_lista_receptie(self):

# self.model = QtSql.QSqlQueryModel()

# self.model.setQuery("SELECT den_produs,concat(pret_in,' Lei'),concat(pret_out,' Lei'),val_tva,cantitate,um FROM receptie_temp;")

self.model = QtSql.QSqlTableModel()

self.model.setTable("produse")

self.model.setQuery("SELECT * FROM receptie_temp;")

self.model.setHeaderData(1, QtCore.Qt.Horizontal, self.tr("Produs "))

self.model.setHeaderData(4, QtCore.Qt.Horizontal, self.tr("Pret cumparare "))

self.model.setHeaderData(5, QtCore.Qt.Horizontal, self.tr("Pret vanzare "))

self.model.setHeaderData(6, QtCore.Qt.Horizontal, self.tr("TVA Produs "))

self.model.setHeaderData(7, QtCore.Qt.Horizontal, self.tr("Cantitate "))

self.model.setHeaderData(11, QtCore.Qt.Horizontal, self.tr("UM "))

self.produse_view.setModel(self.model)

self.produse_view.hideColumn(0) # hide id column

self.produse_view.hideColumn(2)

self.produse_view.hideColumn(3)

self.produse_view.hideColumn(8)

self.produse_view.hideColumn(9)

self.produse_view.hideColumn(10)

self.produse_view.hideColumn(12)

如果我使用这行self.model.setQuery("SELECT * FROM receptie_temp;")我会得到一个错误消息:File "E:\onedrive\Documents\optimpos\module\receptie.py", line 64, in show_lista_receptie

self.model.setQuery("SELECT * FROM receptie_temp;")

TypeError: setQuery(self, QSqlQuery): argument 1 has unexpected type 'str'

如何在不使用数组的情况下查询receptie_temp表中的数据?如何将表中编辑的值更新为sql表?在

谢谢。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值