如何通过单击按钮将输入数据从tablewidget传递到组合框?

时间:2014-07-16 02:41:01

标签: combobox pyqt qtablewidget

我想在我的表中输入数据,然后在pyqt中按'ok'按钮后将其显示在我的组合框中。我可以知道该怎么做吗?每当我运行我的代码时,它只是说self.comboBox.addItem(item)有错误。我不知道使用哪个其他命令。这是我的代码的一部分:

def setup(self, Dialog):
                  ... 
                  ...
    self.comboBox = QtGui.QComboBox(Dialog)
    self.comboBox.setGeometry(QtCore.QRect(20, 100, 431, 22))
    self.comboBox.setObjectName(_fromUtf8("comboBox"))
    self.tableWidget = QtGui.QTableWidget(Dialog)
    self.tableWidget.setGeometry(QtCore.QRect(20, 470, 651, 71))
    self.tableWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
    self.tableWidget.setTextElideMode(QtCore.Qt.ElideRight)
    self.tableWidget.setVerticalScrollMode(QtGui.QAbstractItemView.ScrollPerItem)
    self.tableWidget.setRowCount(1)
    self.tableWidget.setColumnCount(129)
    self.tableWidget.setObjectName(_fromUtf8("tableWidget"))      
    self.tableWidget.horizontalHeader().setVisible(True)
    self.tableWidget.horizontalHeader().setDefaultSectionSize(25)
    self.tableWidget.horizontalHeader().setMinimumSectionSize(26)
    self.tableWidget.verticalHeader().setDefaultSectionSize(25)
    self.tableWidget.verticalHeader().setHighlightSections(True)
    self.pushButton_7 = QtGui.QPushButton(Dialog)
    self.pushButton_7.setGeometry(QtCore.QRect(220, 650, 75, 23))
    self.pushButton_7.setObjectName(_fromUtf8("pushButton_7"))
    self.pushButton_7.clicked.connect(self.additem)

def retranslateUi(self, Dialog):
                  ...
                  ...
    self.tableWidget.setSortingEnabled(False)

def additem(self):
    item = self.tableWidget.item(0,0)
    self.comboBox.addItem(item)

更新:该解决方案仅适用于我的tablewidget的第一个框。我试着这样做:

   def additem(self):
       while true:
           item = self.tableWidget.item(0, 0).text()
           self.comboBox.addItem(item)
           item1 = self.tableWidget.item(0, 1).text()
           self.comboBox.addItem(item1)

但是,我只是不断收到'NoneType'对象没有属性'text'

的错误

更新:我尝试了你的建议。我尝试上传图片以便更清晰但我需要10个声誉才能这样做。无论如何,我在tablewidget中输入了这个:11 22 33 44每一个在一个盒子里,四个盒子。但按'确定'后,只有11个出现在组合框中。即使我在其他框中输入我的值,它也不起作用,它只适用于第一个框。我需要的是他们在我的组合框中显示为'11,22,33,44'。可以这样做吗?和我的tablewidget的所有128列一样?

1 个答案:

答案 0 :(得分:1)

addItem(self) item中的

tableWidgetItem类型。您需要QString添加为comboBox项目,所以请尝试仅更正此行:

item = self.tableWidget.item(0,0).text()

这是工作示例:

# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import Qt

class Widget(QtGui.QWidget):
    def __init__(self):
        super(Widget, self).__init__()
        self.layout = QtGui.QVBoxLayout(self)

        self.comboBox = QtGui.QComboBox(self)
        self.comboBox.setGeometry(QtCore.QRect(20, 100, 431, 22))

        self.tableWidget = QtGui.QTableWidget(self)
        self.tableWidget.setGeometry(QtCore.QRect(20, 470, 651, 71))
        self.tableWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
        self.tableWidget.setTextElideMode(QtCore.Qt.ElideRight)
        self.tableWidget.setVerticalScrollMode(QtGui.QAbstractItemView.ScrollPerItem)
        self.tableWidget.setRowCount(1)
        self.tableWidget.setColumnCount(3) 
        self.tableWidget.horizontalHeader().setVisible(True)
        self.tableWidget.horizontalHeader().setDefaultSectionSize(25)
        self.tableWidget.horizontalHeader().setMinimumSectionSize(26)
        self.tableWidget.verticalHeader().setDefaultSectionSize(25)
        self.tableWidget.verticalHeader().setHighlightSections(True)
        self.tableWidget.setItem(0, 0, QtGui.QTableWidgetItem("first"))
        self.tableWidget.setItem(0, 1, QtGui.QTableWidgetItem("second"))
        self.tableWidget.setItem(0, 2, QtGui.QTableWidgetItem("third"))
        self.tableWidget.resizeColumnsToContents()

        self.pushButton_7 = QtGui.QPushButton("Add item 0.0 to combo")
        self.pushButton_7.setGeometry(QtCore.QRect(220, 650, 75, 23))
        self.pushButton_7.clicked.connect(self.additem)

        self.layout.addWidget(self.comboBox)
        self.layout.addWidget(self.tableWidget)
        self.layout.addWidget(self.pushButton_7)

    def additem(self):
        item = self.tableWidget.item(0,0)#.text()
        self.comboBox.addItem(item)

if __name__ == '__main__':
    app = QtGui.QApplication([])
    w = Widget()
    w.show()
    sys.exit(app.exec_())

修改

如果要将表格行中的所有单元格添加到组合框,则additem应如下所示:

def additem(self):
    for i in range(0, self.tableWidget.columnCount()):
        item = self.tableWidget.item(0,i)
        if item != None:
            text = item.text()
            self.comboBox.addItem(text)

请记住,如果表格单元格为空(item == None),则不会向组合框添加任何内容