Search code examples
comboboxpyqtqt4tableview

PyQT4: Adding combobox in Qtableview


I am new to PyQT.

I am interested to add a combobox to the each row of tableView. Is it possible in PyQT 4?

I know, it is possible in QT5, but not sure about PyQT.

Thank you in advance for help.


Solution

  • Does this need to be done using a QTableView or can you do it using a QTableWidget?

    Making the assumption that you can use the Widget vs the View, you can easily add a combobox (or any widget) to a cell.


    class MainWindow(QtGui.QMainWindow):
        def __init__(self, parent=None):
            QtGui.QMainWindow.__init__(self,parent)
            self.table = QtGui.QTableWidget()
            self.table.setColumnCount(3)
            self.setCentralWidget(self.table)
            data1 = ['row1','row2','row3','row4']
            data2 = ['1','2.0','3.00000001','3.9999999']
            combo_box_options = ["Option 1","Option 2","Option 3"]
    
            self.table.setRowCount(4)
    
            for index in range(4):
                item1 = QtGui.QTableWidgetItem(data1[index])
                self.table.setItem(index,0,item1)
                item2 = QtGui.QTableWidgetItem(data2[index])
                self.table.setItem(index,1,item2)
                combo = QtGui.QComboBox()
                for t in combo_box_options:
                    combo.addItem(t)
                self.table.setCellWidget(index,2,combo)
    

    The important parts here are:

    combo_box_options = ["Option 1","Option 2","Option 3"]
    

    This is the list of values you want your combobox to hold. In this example, there are three options.

    for t in combo_box_options:
        combo.addItem(t)
    self.table.setCellWidget(index,2,combo)
    

    This block sets up the combobox, per row, and then adds it to a cell (the last one in this example).

    The code block above produces out put like this:

    Table Widget with Drop down