Как проверить ячейку в QTableWidget?

Я работаю с pyqt4 в python3.4. Я хочу проверить, является ли текст в ячейке числом с плавающей запятой, когда он вводится. Как мне это сделать?


person Reinier Hernández    schedule 03.06.2016    source источник
comment
Добавление валидатора может заставить пользователя ввести число: pyqt.sourceforge.net/Docs/ PyQt4/qdoublevalidator.html Если ввод не является числом, он не примет ввод в ячейку.   -  person SNygard    schedule 03.06.2016


Ответы (1)


У вас есть два варианта.

Вы можете создать QItemDelegate и переопределить createEditor, setEditorData и setModelData, чтобы управлять виджетом, с которым они представлены, для редактирования данных. Вы можете создать QLineEdit с валидатором, если хотите, но если они могут вводить только числа, вам, вероятно, следует просто использовать QSpinBox или QDoubleSpinBox, которые допускают только целые числа и числа с плавающей запятой. В качестве альтернативы вы можете позволить им вводить все, что они хотят, а затем в функции setModelData просто игнорировать любые введенные значения, которые не являются допустимыми числами.

class MyDelegate(QtGui.QItemDelegate):

    def createEditor(self, parent, option, index):
        return QtGui.QSpinBox(parent)


delegate = MyDelegate()
table.setItemDelegate(delegate)

Или, немного более простое решение, если элементы в вашей таблице уже имеют числа, просто назначьте целое число или число с плавающей запятой роли EditData для элемента. Qt заметит тип класса и автоматически создаст для вас QSpinBox или QDoubleSpinBox.

item = QTableWidgetItem()
item.setData(QtCore.Qt.EditRole, 5)
person Brendan Abel    schedule 03.06.2016
comment
Я пытаюсь использовать QItemDelegate и работает, но мне нужно число с плавающей запятой, и это позволяет мне работать только с целым числом - person Reinier Hernández; 04.06.2016
comment
Используйте QDoubleSpinBox, если вы хотите работать с поплавками - person Brendan Abel; 04.06.2016
comment
Большое спасибо. Можете ли вы сказать мне, где я могу найти документацию о QItemDelegate? Дело в том, что я не люблю писать код, который ты не понимаешь - person Reinier Hernández; 04.06.2016
comment
Просто наберите в Google pyqt qitemdelegate -- pyqt.sourceforge.net/Docs/PyQt4/qitemdelegate.html< /а> - person Brendan Abel; 04.06.2016