使用qTableWidget查看我的sqlite数据库条目。 数据库的第一列是隐藏的,因为它是自动分配给条目的ID
现在,我希望用户选择要删除的行,然后能够按delete按钮。 我使用以下方法来实现这一点:
class StartScherm(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super(StartScherm, self).__init__()
self.setupUi(self)
self.database_laden()
# -- Button presses with .connect -- #
self.tableSnelleKijk.doubleClicked.connect(self.weergave_scherm)
self.tableSnelleKijk.setSelectionBehavior(
QtWidgets.QTableView.SelectRows)
self.tableSnelleKijk.setColumnHidden(0, True)
现在,我尝试创建一个函数,一旦用户单击GUI中的delete按钮,该函数就会读取ID,这样我就可以从sqlite数据库中删除它。我用这个:
def delete(self):
index = self.tableSnelleKijk.selectedItems()
print(index[0].text())
不幸的是,这给了我作为文本的第一个可视列数据,而不是ID为的隐藏列
如何访问隐藏的数据
编辑:将列更改为行 数据库仅隐藏在tableview上,在sqlite中,它只是有一个rowID,我可以使用它访问当前行以进行删除/编辑
数据库代码:
c.execute("""CREATE TABLE Medailles (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
orde text,
periode text,
locatie text,
beschrijving text
)""")
该列在QtableView中以.setColumnHidden隐藏。 当用户决定输入新条目时,数据库将被填充,这是处理此问题的函数:
def add(self):
orde = self.orde_comboBox.currentText()
periode = self.periode_input.text()
locatie = self.locatie_input.text()
beschrijving = self.beschrijving_input.toPlainText()
medaille = Medaille(orde, periode, locatie, beschrijving)
with conn:
c.execute("INSERT INTO Medailles (orde, periode, locatie, beschrijving) VALUES (:orde, :periode, :locatie, :beschrijving)", {
'orde': medaille.orde, 'periode': medaille.periode, 'locatie': medaille.locatie, 'beschrijving': medaille.beschrijving})
self.close()
要获取QTableWidget(PyQt5)中隐藏列的值,请执行以下操作:
如果数据位于不可见列中,则无法选择该列中的项目。您可以使用^{} 函数(或^{} 用于Qt>;=5.11)访问这些索引(及其数据):
注意,如果您需要向数据库写入数据或编辑其布局,则应考虑使用具有QtSql.QSqlTableModel的基本QTabLeVIEW,否则,如果您对实现不十分小心,则可能会面临一些不一致、错误或甚至数据损坏。p>
相关问题 更多 >
编程相关推荐