Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQT4 | Список задач. QTreeView и QTreeWidget [RSS Feed]

#1 Янв. 25, 2018 14:00:37

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

PyQT4 | Список задач. QTreeView и QTreeWidget

Хочу сделать список задач с древовидной структурой, только не знаю, что выбрать QTreeView или QTreeWidget? По опыту работы с QTableWidget, QListWidget знаю, что они проще и удобнее своих “View-аналогов-родителей”. Сейчас не уверен, что мне хватит возможностей QTreeWidget. Вот и хочу решить этот вопрос заранее.
Итак. Что я хочу сделать.
Строка задачи будет выглядить вот так:
раскрывающийся + / чекбокс выполнения / цветной label приоритета задачи / текст задачи / дней осталось до даты задачи / дата выполнения задачи / тэги / кнопка заметки
Эта строка, описывающая задачу, выглядит как фрейм, основанный на Grid, т.е. я мог бы управлять размерами этого фрейма. Например, по нажатию на кнопку заметки (не путать с задачей), высота фрейма увеличивалась бы, а на дополнительном месте появлялось могострочное поле с текстом заметки.
Такое вообще реально сделать?
Если не понятно, то можно провести паралель с мультитаймером, который я делал: строка заметки - это как 1 таймер.
Я только начал изучать QTreeView и QTreeWidget и нормальных примеров с древовидной структурой данных не нашёл, если вам не трудно, выложите, пожалуйста. С трудом себе представляю, как выглядит связь виджета с базой данный (там должен быть многоуровневый список/словарь, как я понимаю).

Отредактировано Kyrym (Янв. 25, 2018 14:00:57)

Офлайн

#2 Янв. 28, 2018 09:35:57

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

PyQT4 | Список задач. QTreeView и QTreeWidget

Есть примеры 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_())

Отредактировано Kyrym (Янв. 28, 2018 10:25:01)

Офлайн

  • Начало
  • » GUI
  • » PyQT4 | Список задач. QTreeView и QTreeWidget[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version