【问题标题】:SQLite and tableWidgetSQLite 和 tableWidget
【发布时间】:2020-03-17 18:29:17
【问题描述】:

如何使 QTableWidget 中的 Headers 在调用 loadData 后也更新。

def loadData(self):
    connection = sqlite3.connect('CUSP.db')
    query = "SELECT * FROM ZAYAVITEL"
    result = connection.execute(query)
    self.tableWidget.setColumnCount(6)
    for row_number, row_data in enumerate(result):
        self.tableWidget.insertRow(row_number)
        for column_number, data in enumerate(row_data):
            self.tableWidget.setItem(row_number, column_number, QtWidgets.QTableWidgetItem(str(data)))
    connection.close()

【问题讨论】:

  • 欢迎来到stackoverflow!您能否提供有关您的问题的更多信息?你想达到什么目的?你尝试了什么?到目前为止,您发现了哪些问题?随时通过编辑您的问题来添加这些信息。

标签: python sqlite pyqt qtablewidget


【解决方案1】:

您可以使用cursor.description 获取列的名称:

def loadData(self):
    self.tableWidget.setColumnCount(0)
    self.tableWidget.setRowCount(0)

    connection = sqlite3.connect("CUSP.db")
    cursor = connection.execute("SELECT * FROM ZAYAVITEL")
    # https://stackoverflow.com/a/7831685/6622587
    names = [description[0] for description in cursor.description]
    self.tableWidget.setColumnCount(len(names))
    self.tableWidget.setHorizontalHeaderLabels(names)

    for i, row_data in enumerate(cursor):
        self.tableWidget.insertRow(i)
        for j, value in enumerate(row_data):
            it = QtWidgets.QTableWidgetItem()
            it.setData(QtCore.Qt.DisplayRole, value)
            self.tableWidget.setItem(i, j, it)

【讨论】:

  • 谢谢,它有效。但是如何确保每次新行都不会添加到以前的行中,并且表只是更新值?
  • @RoyalGoose 如果您意识到我使用了“clear()”来清除以前的数据并放置新信息。
  • 我注意到了,但是由于某种原因,每次调用这个函数后,我都会多出两个空行
  • 我理解了这个问题——.clear()函数只删除了相应单元格中的数据,但是在操作之前需要完全清除整个tableWidget,即行和列
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 2012-08-09
  • 2014-04-24
  • 2018-06-30
相关资源
最近更新 更多