所以,我有一个非常简单的问题: 如何从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'
UPDATE3:
解决了它:
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)
答案 0 :(得分:1)
您需要遍历表格。 QTableWidget包含rowCount()行。可以使用item(row, column)方法访问项目。有关填充它的信息,另请参阅QListWidget documentation。
代码可能如下所示:
def copy_table_column_to_list_widget(table, column, list_widget)
for row in range(table.rowCount()):
text = table.item(row, column).text()
list_widget.addItem(QtGui.QListWidgetItem(text))
copy_table_column_to_list_widget(table, 0, list_widget1)
copy_table_column_to_list_widget(table, 1, list_widget2)
# and so on... or write a loop
<强> UPD 强>
def table_to_list(table):
result = []
num_rows, num_cols = table.rowCount(), table.columntCount()
for col in range(num_cols):
rows = []
for row in range(num_rows):
item = table.item(row, col)
rows.append(item.text() if item else '')
result.append(rows)
return result
结果将采用以下格式:
[['11', '12', '13'], ['21', '22', '23']]
答案 1 :(得分:0)
以下是如何使用单个QStandardItemModel的QTableView和一组QListView对象的示例。这种方法的好处是您只需要将数据保存在一个位置:模型。视图只是反映模型中的内容。
在此示例中,每个列表都设置为查看不同的列。观察更改数据时会发生什么。它随处更新。这是因为模型在数据发生变化时会在内部发出信号。视图只是听取模型。如果您不想使用QListView并且只是想要一些基本的列表数据结构,您可以手动连接到模型发出的信号,并按需更新数据。
from PyQt4 import QtCore, QtGui
class Widget(QtGui.QWidget):
def __init__(self, *args, **kwargs):
super(Widget, self).__init__(*args, **kwargs)
self.resize(800,600)
self.vlayout = QtGui.QVBoxLayout(self)
self.table = QtGui.QTableView()
self.vlayout.addWidget(self.table)
self.hlayout = QtGui.QHBoxLayout()
self.list1 = QtGui.QListView()
self.list2 = QtGui.QListView()
self.list3 = QtGui.QListView()
self.hlayout.addWidget(self.list1)
self.hlayout.addWidget(self.list2)
self.hlayout.addWidget(self.list3)
self.vlayout.addLayout(self.hlayout)
self.model = QtGui.QStandardItemModel(10,10,self)
self.table.setModel(self.model)
self.list1.setModel(self.model)
self.list1.setModelColumn(0)
self.list2.setModel(self.model)
self.list2.setModelColumn(1)
self.list3.setModel(self.model)
self.list3.setModelColumn(2)
self.populateTable()
def populateTable(self):
for row in xrange(10):
for col in xrange(10):
item = QtGui.QStandardItem('%d-%d' % (row, col))
self.model.setItem(row, col, item)
if __name__ == "__main__":
import sys
app = QtGui.QApplication([])
window = Widget()
window.show()
window.raise_()
sys.exit(app.exec_())
答案 2 :(得分:0)
使用PyQt5更简单...
-I