从TableWidget中获取选定单元格的数据
我正在制作一个库存管理程序,但遇到了一个问题,就是如何获取选中单元格的值。我知道需要使用“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 个回答
这是对我有效的代码:
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()
当 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()
我没有使用 currentRow
和 currentColumn
,因为你想要的是点击的响应。这个函数的详细信息可以在这里找到(抱歉,我更喜欢用 pyside——它和 PyQT 基本上是一样的)。另外要注意的是,使用 itemAt
而不是简单的 item
——这样你能得到单元格里的项目,而不是它的内容。要获取内容,可以使用 QTableWidgetItem
的 .text()
函数。
注意——这里使用的是“信号和槽”,特别是“新风格”。因为你使用的是 PyQT4 和 Python 3,所以你应该不会对这些“新东西”感到困惑 :-)
你可以考虑浏览一下关于信号和槽的教程——这可能会帮助你理清一些抽象的概念。祝你好运!