Найти - Пользователи
Полная версия: PyQt Установка нескольких делегатов в столбцах
Начало » GUI » PyQt Установка нескольких делегатов в столбцах
1
Red_baron
Ставлю два делегата в два столбца, ставится только один. В чем проблема?
Т.е. метод 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_())
py.user.next
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)
Red_baron
Спасибо, заработало.

Всё дело назначении родителя в TestDelegate1(self).
warpson
Немного смещаем акценты - КТО И КАК организует поиск в столбцах по первым буквам слева-направо ?

Я просто реализацию вижу именно в “делегато”-подобной схеме :
скажем по нажатию F2-обычный делегат-редактор, а по F7-делегат типа finder
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB