Найти - Пользователи
Полная версия: PyQT4 | Список задач. QTreeView и QTreeWidget
Начало » GUI » PyQT4 | Список задач. QTreeView и QTreeWidget
1
Kyrym
Хочу сделать список задач с древовидной структурой, только не знаю, что выбрать QTreeView или QTreeWidget? По опыту работы с QTableWidget, QListWidget знаю, что они проще и удобнее своих “View-аналогов-родителей”. Сейчас не уверен, что мне хватит возможностей QTreeWidget. Вот и хочу решить этот вопрос заранее.
Итак. Что я хочу сделать.
Строка задачи будет выглядить вот так:
раскрывающийся + / чекбокс выполнения / цветной label приоритета задачи / текст задачи / дней осталось до даты задачи / дата выполнения задачи / тэги / кнопка заметки
Эта строка, описывающая задачу, выглядит как фрейм, основанный на Grid, т.е. я мог бы управлять размерами этого фрейма. Например, по нажатию на кнопку заметки (не путать с задачей), высота фрейма увеличивалась бы, а на дополнительном месте появлялось могострочное поле с текстом заметки.
Такое вообще реально сделать?
Если не понятно, то можно провести паралель с мультитаймером, который я делал: строка заметки - это как 1 таймер.
Я только начал изучать QTreeView и QTreeWidget и нормальных примеров с древовидной структурой данных не нашёл, если вам не трудно, выложите, пожалуйста. С трудом себе представляю, как выглядит связь виджета с базой данный (там должен быть многоуровневый список/словарь, как я понимаю).
Kyrym
Есть примеры QTreeView и QTreeWidget. Как, скажем, vbox вставить в item?
QTreeWidget
 # -*- encoding: utf-8 -*-
from PyQt4 import QtGui, QtCore
import sys
app = QtGui.QApplication(sys.argv)
# === добавить этот vbox в item
vbox_os = QtGui.QVBoxLayout()
lbl = QtGui.QLabel('Текст')
vbox_os.addWidget(lbl)
# ===
treeWidget = QtGui.QTreeWidget()
treeWidget.setColumnCount(2)
treeWidget.setHeaderLabels(['Title', 'Summary']);
#First top level item_ and its kids
item_0 = QtGui.QTreeWidgetItem(treeWidget, ['Title 0', 'Summary 0'])
item_00 = QtGui.QTreeWidgetItem(item_0, ['Title 00', 'Summary 00'] )
item_01 = QtGui.QTreeWidgetItem(item_0, ['Title 01', 'Summary 01'])
#Second top level item_ and its kids
item_1 = QtGui.QTreeWidgetItem(treeWidget, ['Title 1', 'Summary 1'])
item_10 = QtGui.QTreeWidgetItem(item_1, ['Title 10', 'Summary 10'])
item_11 = QtGui.QTreeWidgetItem(item_1, ['Title 11', 'Summary 11'])
item_12 = QtGui.QTreeWidgetItem(item_1, ['Title 12', 'Summary 12'])
#Children of item_11
item_110 = QtGui.QTreeWidgetItem(item_11, ['Title 110', 'Summary 110'])
item_111 = QtGui.QTreeWidgetItem(item_11, ['Title 111', 'Summary 111'])
treeWidget.show() 
sys.exit(app.exec_())
QTreeView
 # -*- encoding: utf-8 -*-
from PyQt4 import QtGui, QtCore
import sys
app = QtGui.QApplication(sys.argv)
# === добавить этот vbox в item
vbox = QtGui.QVBoxLayout()
lbl = QtGui.QLabel('Текст')
vbox.addWidget(lbl)
# ===
model = QtGui.QStandardItemModel()
model.setHorizontalHeaderLabels(['Title', 'Summary'])
rootItem = model.invisibleRootItem()
#First top-level row and children 
item_0 = [QtGui.QStandardItem('Title0'), QtGui.QStandardItem('Summary0')]
item_00 = [QtGui.QStandardItem('Title00'), QtGui.QStandardItem('Summary00')]
item_01 = [QtGui.QStandardItem('Title01'), QtGui.QStandardItem('Summary01')]
rootItem.appendRow(item_0)
item_0[0].appendRow(item_00)
item_0[0].appendRow(item_01)
#Second top-level item_ and its children
item_1 = [QtGui.QStandardItem('Title1'), QtGui.QStandardItem('Summary1')]
item_10 = [QtGui.QStandardItem('Title10'), QtGui.QStandardItem('Summary10')]
item_11 = [QtGui.QStandardItem('Title11'), QtGui.QStandardItem('Summary11')]
item_12 = [QtGui.QStandardItem('Title12'), QtGui.QStandardItem('Summary12')]
rootItem.appendRow(item_1)
item_1[0].appendRow(item_10)
item_1[0].appendRow(item_11)
item_1[0].appendRow(item_12)
#Children of item_11 (third level item_s)
item_110 = [QtGui.QStandardItem('Title110'), QtGui.QStandardItem('Summary110')]
item_111 = [QtGui.QStandardItem('Title111'), QtGui.QStandardItem('Summary111')]
item_11[0].appendRow(item_110)
item_11[0].appendRow(item_111)
treeView = QtGui.QTreeView()
treeView.setModel(model)
treeView.show()
sys.exit(app.exec_())
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