Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 729
1
PyQt5

Почему не отображается дерево?

05.03.2018, 23:31. Показов 715. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создал модель для дерева. Не понимаю, почему не отображаются элементы. rowCount для корневого элемента возвращает 1. Что не так?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QTreeView, QFileSystemModel
from PyQt5.QtCore import QModelIndex, QAbstractItemModel, QVariant, Qt
 
 
 
class MyTreeView(QTreeView):
    pass
 
class TreeItem:
    def __init__(self, parent=None, text=''):
        self.parent = parent
        self.text = text
        self.children = []
 
    ###########
    def __repr__(self):
        return '<TreeItem(%s, %s)>' % (self.parent, self.text)
    ###########
 
    @property
    def children_count(self):
        return len(self.children)
 
    def append_children(self, item):
        self.children.append(item)
 
 
class MyTreeModel(QAbstractItemModel):
    _column_labels = ('')
 
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
 
        self._root = TreeItem(text="Root")
 
        ##############
        root_item = self._root
        for word in ('alpha', 'beta', 'gamma', 'epsilon', 'omega', 'delta', 'zet'):
            item = TreeItem(root_item, word)
            #print('treeitem:', item)
            root_item.append_children(item)
            root_item = item
        ##############
 
 
    def flags(self, index):
        return Qt.ItemIsEnabled
 
    def headerData(self, section, orientation, role):
        if role == Qt.DisplayRole and orientation == Qt.Horizontal:
            return self._column_labels[section]
        else:
            return QVariant()
 
    def rowCount(self, parent):
        print()
        print('=== rowCount ===')
        print('parent row:', parent.row(), 'col:', parent.column())
        print('valid:', parent.isValid())
 
        if not parent.isValid():
            parent_item = self._root
        else:
            parent_item = parent.internalPointer()
 
        children_count = parent_item.children_count
        print('rows: %s' % children_count)
        return children_count
 
 
    def columnCount(self, parent):
        return len(self._column_labels)
 
    def index(self, row, column, parent):
        print('')
        print('=== index ===')
        print('row:%s col:%s parent:%s' % (row, column, parent))
        if not self.hasIndex(row, column, parent):
            return QModelIndex()
 
        if not parent.isValid():
            parent_item = self._root
        else:
            parent_item = parent.internalPointer()
 
        try:
            child_item = parent_item.children[row]
            print('index created')
            return self.createIndex(row, column, child_item)
        except IndexError:
            return QModelIndex()
 
    def parent(self, index):
        print('')
        print('=== index ===')
        node = index.internalPointer()
        if node is None:
            return QModelIndex()
        parent = node.parent
        if parent is None:
            return QModelIndex()
        grandparent = parent.parent
        if grandparent is None:
            return QModelIndex()
        row = grandparent.child.index(parent)
        return self.createIndex(row, 0, parent)
 
 
    def data(self, index, role):
        print()
        print('=== data ===')
        print('row:', index.row(), 'col:', index.column())
        if not index.isValid():
            return QVariant()
 
        if role == Qt.DisplayRole:
            print('display data')
            if index.column() == 0:
                #return QVariant(index.internalPointer().text)
                return '123'
            else:
                return QVariant()
        else:
            return QVariant()
 
 
 
 
 
app = QApplication(sys.argv)
 
#wnd = QWidget()
wnd = QMainWindow()
wnd.resize(500, 500)
wnd.move(300, 100)
wnd.show()
 
 
#tree_model = QFileSystemModel()
#tree_model.setRootPath('/')
tree_model = MyTreeModel()
 
tree_view = MyTreeView()
tree_view.setModel(tree_model)
 
wnd.setCentralWidget(tree_view)
 
 
sys.exit(app.exec_())
Добавлено через 3 часа 19 минут
Сам разобрался - неправильно задал столбцы. Нужно было так:
Python
1
_column_labels = ('',)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2018, 23:31
Ответы с готовыми решениями:

Не отображается дерево
Проблема в том, что у меня при запуске программы не отображается дерево компонента Treeview, хотя...

Почему бд не отображается?
Здравствуйте! Подскажите, пожалуйста, создал бд в pg_default бд через pgAdmin 4. Решил дальше...

Почему не заполняется дерево?
Всё никак не могу заполнить дерево. Исходя из моих тестов, не создается даже корень. Вот мой код...

почему не заполняется дерево?
почему не заполняется дерево? root = NULL tree.h #include &lt;iostream&gt; #include &lt;string&gt; ...

Почему графика не отображается
Привет) Буду благодарна, если поможете разобраться. В программе используется компонент chart, при...

0
05.03.2018, 23:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2018, 23:31
Помогаю со студенческими работами здесь

Почему не отображается контент
На главной странице и на внутренней повторяющийся блок. На главной странице он отображается (1...

Почему отображается красным?
Я нуб в маткаде, до этого работал в SMathStudio, но там таких проблем не было, перешел в маткад,...

Почему не отображается кириллица?
сохранено в utf-8 без BOM, &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;Моя первая страничка&lt;/title&gt; ...

Почему не отображается мяч
//Подключаем модули #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include...

Почему не отображается число
#define _CRT_SECURE_NO_WARNINGS #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main(int argc, char*...

Почему не отображается иконка ?
&quot;Всё вродебы не плохо, но всегда есть одно &quot;но&quot;. Понять не легко почему всё именно так, а не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru