【发布时间】:2019-03-31 23:55:41
【问题描述】:
所以,我有一个非常简单的问题: 如何从 QTableWidget 获取输入并将其放入某些列表(第一个列表到第一个列表,第二个列表到第二个列表等等...)?
我已经用谷歌搜索了,但还没有真正找到任何东西......
更新:
其实我是这么想的:
self.tableWidget.cellChanged.connect(self.cellchanged)
def cellchanged(self):
cur = self.tableWidget.currentColumn()
cur2 = self.tableWidget.currentRow()
y = children[cur]
text = self.tableWidget.currentItem().text()
y.insert(cur2, text)
但是当我更新表格时出现这个错误(它只是显示,它不会伤害程序):
def updatetable(self):
self.tableWidget.setRowCount(0)
self.tableWidget.setRowCount(100)
r=0
c=0
for x in children:
for i in x:
newItem = QtGui.QTableWidgetItem(i)
self.tableWidget.setItem(r, c, newItem)
r += 1
r = 0
c += 1
错误:
if self.tableWidget.currentItem().text():
AttributeError: 'NoneType' object has no attribute 'text'
更新3:
解决了:
self.tableWidget.cellChanged.connect(self.cellchanged)
def cellchanged(self):
cur = self.tableWidget.currentColumn()
cur2 = self.tableWidget.currentRow()
y = children[cur]
self.tableWidget.cellActivated.connect(self.cell)
def cell(self):
text = self.tableWidget.currentItem().text()
y.insert(cur2, text)
【问题讨论】:
-
你能更具体地说明你想要什么吗?当您说“输入”时,您是指当前选择吗?你的意思是任何时候任意行吗?您是否只需要一组列表小部件来反映表格的活动列?还是您只想将整个数据集转储到每列的列表对象中?
-
我想要的是,每当我在 QTableWidget 中写入内容以保存到列表中时...我有 15 列和 15 个列表,我希望将第一列中的项目保存在第一个列表,第二列中的项目要保存在第二个列表中,依此类推......顺便说一下,如果项目根据它们的行保存在它们的列表中会很有帮助,以便第一行中的项目在第二行中的项目之前...
-
那么@reclosedev 给出的答案对你来说效率极低。我不想每次更改表格中的单元格时都必须执行此操作。列表将用于什么用途?列表小部件?还是只是数据?您可能希望监听信号并随着单元格的变化进行更新。
-
我认为如果你更新你的问题来解释用例(你想要解决的实际问题),你可能会得到一个更好的答案,而不是一些通用的方法。
-
同意@jdi。另外,看起来
QTableWidget应该替换为QTableView和QStandardItemModel(或其他模型)。
标签: python input pyqt qtablewidget