Форум сайта python.su
Хочу сделать список задач с древовидной структурой, только не знаю, что выбрать QTreeView или QTreeWidget? По опыту работы с QTableWidget, QListWidget знаю, что они проще и удобнее своих “View-аналогов-родителей”. Сейчас не уверен, что мне хватит возможностей QTreeWidget. Вот и хочу решить этот вопрос заранее.
Итак. Что я хочу сделать.
Строка задачи будет выглядить вот так:
раскрывающийся + / чекбокс выполнения / цветной label приоритета задачи / текст задачи / дней осталось до даты задачи / дата выполнения задачи / тэги / кнопка заметки
Эта строка, описывающая задачу, выглядит как фрейм, основанный на Grid, т.е. я мог бы управлять размерами этого фрейма. Например, по нажатию на кнопку заметки (не путать с задачей), высота фрейма увеличивалась бы, а на дополнительном месте появлялось могострочное поле с текстом заметки.
Такое вообще реально сделать?
Если не понятно, то можно провести паралель с мультитаймером, который я делал: строка заметки - это как 1 таймер.
Я только начал изучать QTreeView и QTreeWidget и нормальных примеров с древовидной структурой данных не нашёл, если вам не трудно, выложите, пожалуйста. С трудом себе представляю, как выглядит связь виджета с базой данный (там должен быть многоуровневый список/словарь, как я понимаю).
Отредактировано Kyrym (Янв. 25, 2018 14:00:57)
Офлайн
Есть примеры 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_())
# -*- 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)
Офлайн