Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQt Установка нескольких делегатов в столбцах [RSS Feed]

#1 Апрель 3, 2014 17:53:29

Red_baron
Зарегистрирован: 2012-08-30
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt Установка нескольких делегатов в столбцах

Ставлю два делегата в два столбца, ставится только один. В чем проблема?
Т.е. метод 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_())

Офлайн

#2 Апрель 3, 2014 22:43:03

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

PyQt Установка нескольких делегатов в столбцах

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)



Офлайн

#3 Апрель 4, 2014 06:38:51

Red_baron
Зарегистрирован: 2012-08-30
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt Установка нескольких делегатов в столбцах

Спасибо, заработало.

Всё дело назначении родителя в TestDelegate1(self).

Отредактировано Red_baron (Апрель 4, 2014 07:16:44)

Офлайн

#4 Фев. 22, 2015 18:51:36

warpson
От:
Зарегистрирован: 2010-10-27
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt Установка нескольких делегатов в столбцах

Немного смещаем акценты - КТО И КАК организует поиск в столбцах по первым буквам слева-направо ?

Я просто реализацию вижу именно в “делегато”-подобной схеме :
скажем по нажатию F2-обычный делегат-редактор, а по F7-делегат типа finder



Офлайн

  • Начало
  • » GUI
  • » PyQt Установка нескольких делегатов в столбцах[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version