从表格小部件中的选定单元格中检索单元格数据
Posted
技术标签:
【中文标题】从表格小部件中的选定单元格中检索单元格数据【英文标题】:Retrieving cell data from a selected cell in a tablewidget 【发布时间】:2013-01-29 17:18:01 【问题描述】:我正在制作一个库存控制程序,但在获取选定单元格的值时遇到了问题,我知道我需要使用“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
任何帮助将不胜感激
谢谢
山姆
【问题讨论】:
如果您可以发布代码 sn-p 它可能 i) 帮助我们理解和 ii) 帮助您解释 更新:我现在可以检索单元格项目,但是它返回的是实际项目而不是数据 def getCell(self): row = self.table.currentRow() print(row) self.ID = self.table.item(row, 0) print(self.ID) 这返回item.text()
。
【参考方案1】:
当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
- 因为您将在单元格中获得项目,而不是它的内容。使用QTableWidgetItem
的.text()
函数获取内容。
注意 - 这是使用“插槽和信号”,特别是“新样式”。当您使用 PyQT4 和 Python 3 时,您应该对“新东西”没有任何问题 :-)
您可能会考虑浏览插槽和信号 tutorial - 这可能会理顺其中一些抽象概念。祝你好运!
【讨论】:
row = self.table.currentRow() print(row) self.item = self.table.item.text(row, 0) self.ID = self.item.text() print( self.ID) 这不适合我吗?我收到此错误 Traceback(最近一次调用最后一次):文件“F:\College\Computing\Stock control\Coding\Stock Control GUI.py”,第 453 行,在 getCell self.item = self.table.item.text(行,0) AttributeError: 'builtin_function_or_method' 对象没有属性 'text' 听起来item
不是QTableWidgetItem
- 看看print(type(self.item))
产生了什么,然后在手册中查找。
ahhh,我只是注意到我的代码中有一个小错误,我保留了 item 而不是使用 itemAt。现在它工作得很好,我可以继续完成这个程序:L
只是想知道我是否可以得到更多帮助,我如何将这个 [('example data', 'example data', 'example data', 'example data')] 转换成这个 [ (示例数据),(示例数据),(示例数据),(示例数据)] ??
你可能会打开一个新问题...如果example data
是一个数值,那么如果x = [('example data', 'example data', 'example data', 'example data')]
然后[float(e) for e in x[0]]
将返回一个浮点列表-并且你有一个嵌套列表,因此x[0]
【参考方案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()
【讨论】:
以上是关于从表格小部件中的选定单元格中检索单元格数据的主要内容,如果未能解决你的问题,请参考以下文章
从 PyQt 中的表格小部件中选择多行后,单元格小部件(按钮)显示在错误的位置