从表格小部件中的选定单元格检索单元格数据

问题描述 投票:0回答:3

我正在制作一个库存控制程序,我在获取选定单元格的值时遇到了问题,我知道我需要使用“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

任何帮助将不胜感激

谢谢

山姆

python pyqt4 qtablewidget
3个回答
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()

我没有使用

currentRow
currentColumn
因为你想要对
click
的回应。 here 记录了此功能(抱歉,我更喜欢 pyside - 它与 PyQT 几乎相同)。另请注意
itemAt
而不仅仅是
item
- 因为您将在单元格中获得项目,而不是它的内容。使用
.text()
QTableWidgetItem
功能获取内容。

注意 - 这是使用“插槽和信号”,特别是“新样式”。当您使用 PyQT4 和 Python 3 时,您应该不会遇到“新东西”的问题:-)

您可能会考虑浏览插槽和信号教程 - 这可能会理清其中一些抽象概念。祝你好运!


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()

0
投票
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()
cell_value = table.item(current_row, current_column).text()
             
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 AttributeError: 'NoneType' object has no attribute 'text'
© www.soinside.com 2019 - 2024. All rights reserved.