Форум сайта python.su
Ставлю два делегата в два столбца, ставится только один. В чем проблема?
Т.е. метод init вызывается два раза, а вот createEditor только один.
Тестовый пример:
import sys from PyQt4 import QtGui class TestDelegate1(QtGui.QStyledItemDelegate): """Тестовый делегат""" def __init__(self, parent = None): """Инициализация делегата""" print("Вызван метод init") super().__init__(parent) def createEditor(self, parent, option, index): """Создание редактора""" print("Вызван метод createEditor") return super().createEditor(parent, option, index) def setEditorData(self, editor, index): """Передача данных в редактор""" print("Вызван метод setEditorData") return super().setEditorData(editor, index) class TestDelegate2(QtGui.QStyledItemDelegate): """Тестовый делегат""" def __init__(self, parent = None): """Инициализация делегата""" print("Вызван метод init") super().__init__(parent) def createEditor(self, parent, option, index): """Создание редактора""" print("Вызван метод createEditor") return super().createEditor(parent, option, index) def setEditorData(self, editor, index): """Передача данных в редактор""" print("Вызван метод setEditorData") return super().setEditorData(editor, index) class MyWindow(QtGui.QWidget): """Окно""" def __init__(self): """Метод init""" super().__init__() self.setWindowTitle("Тест") #Модель model1 = QtGui.QStandardItemModel() model1.setColumnCount(3) model1.setRowCount(3) #Представление self.view1 = QtGui.QTableView() self.view1.setModel(model1) #Делегаты delegate1 = TestDelegate1() delegate2 = TestDelegate2() self.view1.setItemDelegateForColumn(0, delegate1) self.view1.setItemDelegateForColumn(1, delegate2) #Разметка layout = QtGui.QHBoxLayout(self) layout.addWidget(self.view1) #Создаем экземпляр приложение app = QtGui.QApplication(sys.argv) #Создаем эксземпляр класса MainWindow obj = MyWindow() #Показываем окно obj.show() #Запускаем цикл обработки событий sys.exit(app.exec_())
Офлайн
class MyWindow(QtGui.QWidget): """Окно""" def __init__(self): """Метод init""" super().__init__() self.setWindowTitle("Тест") #Модель model1 = QtGui.QStandardItemModel() model1.setColumnCount(3) model1.setRowCount(3) #Представление self.view1 = QtGui.QTableView() self.view1.setModel(model1) #Делегаты delegate1 = TestDelegate1(self) delegate2 = TestDelegate2(self) self.view1.setItemDelegateForColumn(0, delegate1) self.view1.setItemDelegateForColumn(1, delegate2) #Разметка #layout = QtGui.QVBoxLayout(self) #layout.addWidget(self.view1) vbox = QtGui.QVBoxLayout() vbox.addWidget(self.view1) self.setLayout(vbox)
Офлайн
Спасибо, заработало.
Всё дело назначении родителя в TestDelegate1(self).
Отредактировано Red_baron (Апрель 4, 2014 07:16:44)
Офлайн
Немного смещаем акценты - КТО И КАК организует поиск в столбцах по первым буквам слева-направо ?
Я просто реализацию вижу именно в “делегато”-подобной схеме :
скажем по нажатию F2-обычный делегат-редактор, а по F7-делегат типа finder
Офлайн