Форум сайта python.su
Имеется таблица, в одном из столбцов необходимо вести контроль правильности ввода данных путем применения масок. Для этого каждому нужному итему в таблице был присвоен делегат, в котором был переопределен метод qtablewidgetitem ctrateEditor. В нем происходит создание объекта QLineEdit, в котором и происходит путем проверки индекса ячейки наложение соответствующей маски. Код.
class articleValidate(QtGui.QItemDelegate): def __init__(self, row, parent = None): QtGui.QItemDelegate.__init__(self, parent) self.row = row def createEditor(self, parent, options, index): editor = QtGui.QLineEdit() if self.row == 'Article': valid = QtGui.QIntValidator(1000000, 9999999, self) elif self.row == 'Name': rx = QtCore.QRegExp("(.{,80})") valid = QtGui.QRegExpValidator(rx, self) elif self.row == 'Size': rx = QtCore.QRegExp("(.{,30})") valid = QtGui.QRegExpValidator(rx, self) ................................. editor.setValidator(valid) return editor
self.item_delegate = itemDelegate.articleValidate(0) self.table.setItemDelegateForColumn(1, self.item_delegate) self.connect(self.table, QtCore.SIGNAL('cellDoubleClicked(int, int)'), lambda row = 1: self.slot_cellClick(row)) def slot_cellClick(self, row): self.item_delegate.__init__(self.field[row])
Офлайн
SerbisПотому что не задается родитель для виджета
Во первых вызов QLineEdit приводит к тому, что при двойном клике по ячейке, происходит создание нового окна
Serbisда
возможно ли заставить QLineEdit интегрироваться в ячейку, а не вылезать в отдельном окне?
editor = QtGui.QLineEdit(parent)
SerbisКрэш, скорее всего, вызван тем, что __init__ делегата вызывается несколько раз.
попытка просто начать ввод текста в ячейку приводит к крешу
Отредактировано reclosedev (Июнь 25, 2012 09:37:06)
Офлайн
Недавно делал похожую таблицу:
#!/usr/bin/python # -*- coding: utf-8 -*- # python2.7 #------------------------------------------------ import sys from PyQt4 import QtCore, QtGui, uic class LineEditDelegate(QtGui.QItemDelegate): def createEditor(self, parent, option, index): editor = QtGui.QLineEdit(parent) editor.setInputMask("B.0000") #маска return editor class MainWindow(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) uic.loadUi('testtable.ui', self) #таблица в дизайнере 5x4 delegate = LineEditDelegate() self.table.setItemDelegate(delegate) app = QtGui.QApplication(sys.argv) w = MainWindow() w.show() sys.exit(app.exec_())
Отредактировано verstal4ik (Сен. 8, 2012 09:57:22)
Офлайн
Вот только не пойму, как сделать маску, чтоб числа можно было написать от 0.0000 до 1.0000 или 0.9999
Офлайн
verstal4ikЗачем маски? Есть QDoubleValidator
Вот только не пойму, как сделать маску, чтоб числа можно было написать от 0.0000 до 1.0000 или 0.9999
Офлайн