Уведомления

Группа в Telegram: @pythonsu

#1 Май 25, 2017 18:49:04

Alexey13
Зарегистрирован: 2017-05-25
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Делегат и qtreeview

Здравствуйте.
Подскажите в чем может быть дело: использую делегата в qtreeview, но он почему то запускается в отдельном окне
Код полностью

[code python]# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPalette, QStandardItemModel, QStandardItem
from PyQt5.QtCore import QModelIndex, Qt

class SpinBoxDDelegate(QStyledItemDelegate):
def createEditor(self, parent, opt, ind):
if ind.row() == 0 and ind.column() == 1:
editor = QSpinBox()
editor.setFrame(False)
editor.setMinimum(1)
editor.setMaximum(3)
editor.setSingleStep(1)
return editor
elif ind.row() == 1 and ind.column() == 1:
editor = QSpinBox()
editor.setFrame(False)
editor.setMinimum(1)
editor.setMaximum(1000)
editor.setSingleStep(5)
return editor
else:
return
def setEditorData(self, editor, ind):
val = int(ind.model().data(ind,Qt.EditRole))
editor.setValue(val)
def updateEditorGeometry(self, editor, opt, ind):
editor.setGeometry(opt.rect)
def setModelData(self, editor, model, ind):
val = str(editor.value())
model.setData(ind,val,Qt.EditRole)

class NM_MainWindow(QWidget):
def __init__(self):
super().__init__()
self.resize(1200, 800)
self.sys_dev = QTreeView(self)
self.sys_dev.resize(600,500)
item11 = QStandardItem('Система')
sti = QStandardItemModel()
item12 = QStandardItem('1')
item21 = QStandardItem('Плотность')
item22 = QStandardItem('36')
item31 = QStandardItem('a0/b0')
item32 = QStandardItem('2')
sti.appendRow([item11, item12])
sti.appendRow([item21, item22])
sti.appendRow([item31, item32])
self.sys_dev.setModel(sti)
self.sys_dev.setItemDelegate(SpinBoxDDelegate())
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
mui = NM_MainWindow()
mui.show()
sys.exit(app.exec_())[/code]

Офлайн

#2 Май 25, 2017 20:09:03

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2680
Репутация: +  182  -
Профиль   Отправить e-mail  

Делегат и qtreeview

 editor = QSpinBox(parent)



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Май 26, 2017 09:04:01

Alexey13
Зарегистрирован: 2017-05-25
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Делегат и qtreeview

Спасибо, все работает!!

Офлайн

#4 Май 26, 2017 12:58:19

Alexey13
Зарегистрирован: 2017-05-25
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Делегат и qtreeview

Еще возник вопрос
Создаю делегата для отрисовки grid в дереве

 class fraimDelegate(QStyledItemDelegate):
    def paint(self, painter, opt, ind):
        painter.save()
        painter.setPen(Qt.gray)
        x = opt.rect.x()
        y = opt.rect.y()
        h = opt.rect.height()
        w = opt.rect.width()
        if ind.column() == 0:
            w = w + x
            x = 0
        painter.drawRect(x,y,w,h)
        painter.restore()
Рисует рамки нормально, но при этом не отображает содержимое ячеек, как отобразить содержимое?

Прикреплённый файлы:
attachment unnamed (1).png (1,4 KБ)

Офлайн

#5 Май 26, 2017 13:06:00

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2680
Репутация: +  182  -
Профиль   Отправить e-mail  

Делегат и qtreeview

Добавь в начало

 QStyledItemDelegate.paint(self, painter, opt, ind)



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version