0
votes

If I have a really simple QTableWidget like the following:

data = ['first_row', 'second_row', 'third_row']

qTable = self.dockwidget.tableWidget
qTable.setRowCount(len(data))
qTable.setColumnCount(2)

for row in range(len(data)):
    for col in [0]:
        item = QTableWidgetItem(str(data[row]))
        qTable.setItem(row,col,item)
    for col in [1]:
        qTable.setItem(row,col,'0.1')

How could I make so that in the second column (where the default value is 0.1), the user can only input values and not string?

1
by values you mean integers? - Erik Šťastný
@ErikŠťastný - Ideally floats if possible :) - Joseph
@ErikŠťastný - Thanks for the link, I'll have to see how to translate c++ to python! - Joseph
Or you can simple bind some code on Item change event but its not user friendly because it allow to write others character but after enter delete them. - Erik Šťastný

1 Answers

1
votes

You can use something like this but there will be better solution i think.

   self.ui.tableWidget.itemChanged.connect(self.item_changed)

def item_changed(self, Qitem):
    try:
        test = float(Qitem.text())
    except ValueError:
        Msgbox = QMessageBox()
        Msgbox.setText("Error, value must be number!")
        Msgbox.exec()
        Qitem.setText(str(0.1))