从TableWidget中获取选定单元格的数据

7 投票
2 回答
42618 浏览
提问于 2025-04-17 14:05

我正在制作一个库存管理程序,但遇到了一个问题,就是如何获取选中单元格的值。我知道需要使用“QtGui.QTableWidget.currentRow”和“QtGui.QTableWidget.currentColumn”来获取项目的位置。但是我发现这并不好使,因为当调用这些函数时,什么都没有被选中,所以它们返回的是-1,-1。

有没有人知道怎么才能让“QtGui.QTableWidget.currentRow”和“QtGui.QTableWidget.currentColumn”在用户每次选择单元格时都能运行呢?

我觉得在获取到坐标后,获取实际数据的代码是“QtGui.QTableWidget.item”?

这是我用来获取行和列的代码:

row = self.table.currentRow
column = self.table.currentColumn
self.ID = self.table.item(row, column)

当用户点击一个按钮来添加库存时,程序应该使用刚刚获取的产品代码来更改数据库,同时从用户那里获取添加的数量。

我正在使用Python 3.2和PyQt 4。

任何帮助都将不胜感激。

谢谢。

Sam

2 个回答

1

这是对我有效的代码:

def get_selected_cell_value():
    current_row = self.sold_items_details_table.currentRow()
    current_column = self.sold_items_details_table.currentColumn()
    cell_value = table.item(current_row, current_column).text()
24

QTableWidget 发现有人点击了它的某个单元格时,它会发出一个 cellClicked 事件——你需要连接这个事件。你可以在你的设置代码中写点类似下面的东西:

self.table.cellClicked.connect(self.cell_was_clicked)

cell_was_clicked 这个函数可能长这样:

def cell_was_clicked(self, row, column):
    print("Row %d and Column %d was clicked" % (row, column))
    item = self.table.itemAt(row, column)
    self.ID = item.text()

我没有使用 currentRowcurrentColumn,因为你想要的是点击的响应。这个函数的详细信息可以在这里找到(抱歉,我更喜欢用 pyside——它和 PyQT 基本上是一样的)。另外要注意的是,使用 itemAt 而不是简单的 item——这样你能得到单元格里的项目,而不是它的内容。要获取内容,可以使用 QTableWidgetItem.text() 函数。

注意——这里使用的是“信号和槽”,特别是“新风格”。因为你使用的是 PyQT4 和 Python 3,所以你应该不会对这些“新东西”感到困惑 :-)

你可以考虑浏览一下关于信号和槽的教程——这可能会帮助你理清一些抽象的概念。祝你好运!

撰写回答