如何使用PySide向QTableWidget添加数据

3
这个问题的答案要么是用C++编写,要么就是没有真正回答我的问题。我正在学习Python,虽然已经掌握了这门语言,但还没有构建实时应用程序。
我使用QT设计了用户界面,并将该用户界面导入到我的主程序中。
用户界面[附有截图] *尝试实现:*
我想在QLineEdit中添加数据,当我点击“Add Row”按钮时,它应该将数据输入到QTableWidget中。
我已经使用以下语句将UI导入到我的主程序中: from "firstApp" import PyMainWindow
我需要在我的主程序中为QTableWidget创建新对象以添加数据吗?
这就是我想做的事情,但它不起作用。
代码不起作用:
self.addData.clicked.connect(self.addDataClicked)
def addDataClicked(self):
    username = self.userName.text()
    print username ## for testing if signal is working ##

    self.item.setItem(0,0,username) 

## 0代表行,0代表列,username是我想要添加的数据 ##

我收到的错误是全局不存在该项。我理解这一点,但我认为因为我已经将UI导入到我的主应用程序中,Python会知道我正在谈论UI文件中的那个项目。它像这样编写。

    item = QtGui.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(0, item)
    item = QtGui.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(1, item)
    item = QtGui.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(2, item)
    item = QtGui.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(3, item)
    item = QtGui.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(4, item)
    item = QtGui.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(5, item)
    self.tableWidget.horizontalHeader().setVisible(True)

请帮忙。

1个回答

2
您输入的数据应该是您的表头?这似乎很不寻常。
文档中可以看到:

在将项添加到所需位置之前,需要在表格外部构建项:

QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg(pow(row, column+1)));
tableWidget->setItem(row, column, newItem);

尝试像这样做:

试试以下方法:

def addDataClicked(self):
    username = self.userName.text()

    self.myTable.insertRow(0)
    item = QtGui.QTableWidgetItem(username)
    self.myTable.setItem(0, 0, item)

[编辑] 问题是,新项目被创建为一个独立的对象,然后您将其添加到容器中。Qt中的所有项目视图小部件都是这样工作的(但其中一些构造函数允许您在创建时这样做)

从之前链接的页面中:

列表小部件的构造方式与任何其他小部件相同:

QListWidget *listWidget = new QListWidget(this);
  • 当构建列表小部件时,可以直接将列表项添加到其中:
new QListWidgetItem(tr("Sycamore"), listWidget);
new QListWidgetItem(tr("Chestnut"), listWidget);
new QListWidgetItem(tr("Mahogany"), listWidget); 

它们也可以在没有父列表控件的情况下构建,并在以后的某个时候添加到列表中:
QListWidgetItem *newItem = new QListWidgetItem;
newItem->setText(itemText);
listWidget->insertItem(row, newItem);

谢谢回复,我找到了我的代码运行的方法,但这也很有意义。您能解释一下QTableWidgetItem *newItem是什么意思吗?看起来您把4行代码写在了1行里,这真的很好。这就是我做的方式。item1 = QTableWidgetItem(self.userName.text()) item2 = QTableWidgetItem(self.firstName.text()) item3 = QTableWidgetItem(self.address.text()) item4 = QTableWidgetItem(self.phoneNumber.text()) - Fawad
感谢您提供额外的指导! - Tuhin Mitra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接