Если вы вставите данные элемента в виде текстовых строк, они всегда будут использовать алфавитно-цифровой порядок, поэтому числа от 1 до 20 будут отсортированы следующим образом:
1, 10, 2, 20, 3, 4, ...
Для достижения числового порядка данные имеют хранится как цифра c, и это можно сделать с помощью setData(role, value)
:
from random import randrange
class MyWindow(QtWidgets.QWidget):
# ...
def addData(self):
for row in range(10):
item = QtWidgets.QTableWidgetItem()
item.setData(QtCore.Qt.DisplayRole, randrange(10000))
self.table.setItem(row, 1, item)
В качестве альтернативы, вы можете создать подкласс QTableWidgetItem, как показано в этом ответе: Сортировка в pyqt tablewidget .