Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 257
Mohammad Saifullah Avatar asked May 26 '15 11:05

Mohammad Saifullah


2 Answers

If you really want to use QTableView, then it has special method called setIndexWidget and you need only index where you want to put the widget. Small example.

    model = QStandardItemModel (4, 4)
    for row in range(4):
        for column in range(4):
            item = QStandardItem("row %d, column %d" % (row, column))
            model.setItem(row, column, item)

    self.tableView.setModel(model)
    for row in range(4):
        c = QComboBox()
        c.addItems(['cell11','cell12','cell13','cell14','cell15',])
        i = self.tableView.model().index(row,2)
        self.tableView.setIndexWidget(i,c)

Result is similar to the first answer.

like image 77
Kosovan Avatar answered Nov 19 '22 23:11

Kosovan


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

like image 22
Andy Avatar answered Nov 19 '22 23:11

Andy