0

After my previous problem, I have my widgets on my main window. But this lasts doesn't come with any data: the datagridview haven't columns and the treeview are invisible or without my hard coded items. Here's my code:

app.py

#!/usr/bin/env python import sys from PyQt5.QtCore import Qt from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QApplication, qApp, QWidget, QMainWindow, QGridLayout, QMenuBar, QAction, QToolBar, QStatusBar from views import Main class TerraSoft(QMainWindow): def __init__(self): QMainWindow.__init__(self) self.setWindowTitle('TerraSoft') self.setWindowState(Qt.WindowMaximized) exitAct = QAction(QIcon('exit24.png'), 'Exit', self) exitAct.setShortcut('Ctrl+Q') exitAct.triggered.connect(qApp.quit) fileMenu = self.menuBar().addMenu('File') fileMenu.addAction(exitAct) toolbar = self.addToolBar('Main') toolbar.addAction(exitAct) main = Main() self.setCentralWidget(main) self.statusBar().showMessage('Bienvenue dans TerraSoft') if __name__ == '__main__': app = QApplication(sys.argv) ex = TerraSoft() ex.show() sys.exit(app.exec_()) 

.views.py

import sys from PyQt5.QtCore import Qt from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QApplication, QWidget, qApp, QAction, QSplitter, QMenuBar, QToolBar, QGridLayout, QStatusBar from Family.views import FamilyTreeView from Specie.views import EventsTableView class Main(QWidget): def __init__(self, *args): QWidget.__init__(self, *args) familyTreeView = FamilyTreeView(self) eventsTableView = EventsTableView(self) HSplitter = QSplitter(Qt.Horizontal) HSplitter.addWidget(familyTreeView) HSplitter.addWidget(eventsTableView) grid = QGridLayout() grid.addWidget(HSplitter) self.setLayout(grid) 

module: Family.views.py

import sys from PyQt5.QtCore import Qt from PyQt5.QtGui import QStandardItemModel, QStandardItem from PyQt5.QtWidgets import QApplication, QWidget, QTreeView families = [ ("Craspedocephalus", [ ("puniceus", []), ("trigonocephalus", []) ]), ("Trimeresurus", [ ("albolabris", []) ]), ("Elapidé", []) ] class FamilyTreeView(QWidget): """description of class""" def __init__(self, *args): QWidget.__init__(self, *args) self.familyList = QTreeView() self.familyList.setMaximumWidth(300) self.model = QStandardItemModel() self.addItems(self.model, families) self.familyList.setModel(self.model) self.model.setHorizontalHeaderLabels([self.tr("Familles")]) def addItems(self, parent, elements): for text, children in elements: item = QStandardItem(text) parent.appendRow(item) if children: self.addItems(item, children) 

module: specie.views.py

import sys from PyQt5.QtCore import Qt from PyQt5.QtGui import QStandardItemModel, QStandardItem from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTreeView class EventsTableView(QTableWidget): """description of class""" def __init__(self, *args): QTableWidget.__init__(self, *args) self.eventsTable = QTableWidget() self.eventsTable.setColumnCount(3) self.eventsTable.setHorizontalHeaderLabels(('Date', 'Catégorie', 'Description')) enter code here 

The result of this code gives: enter image description here

hope you can help me again,

thanks per advance !

1

1 Answer 1

1

Not really sure why you want to derive FamilyTreeView from QWidget. I worked out a solution deriving it from QTreeView, directly. Your addItems method works correctly, but I used invisibleRootItem member of QStandardItem as the upper parent (i.e. root).

class FamilyTreeView(QTreeView): """description of class""" def __init__(self, *args): QTreeView.__init__(self, *args) the_model = QStandardItemModel() the_model.setHorizontalHeaderLabels([self.tr("Familles")]) self.addItems(the_model.invisibleRootItem(), families) self.setModel(the_model) def addItems(self, parent, elements): for text, children in elements: item = QStandardItem(text) parent.appendRow(item) if children: self.addItems(item, children) 

Your EventsTableView class has some issues too. It inherits from QTableWidget (i.e. is a QTableWidget) but yet defines an inner QTableWidget, which is unnecessary. Here is a better version:

class EventsTableView(QTableWidget): """description of class""" def __init__(self, *args): QTableWidget.__init__(self, *args) self.setColumnCount(3) self.setHorizontalHeaderLabels(('Date', 'Catégorie', 'Description')) 
Sign up to request clarification or add additional context in comments.

1 Comment

Do you know why the datagridview doesn't show the (headers) columns ?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.