2017-11-02 3 views
0

이전 문제가 발생하면 주 창에 위젯이 있습니다. 그러나이 마지막에는 어떤 데이터도 포함되어 있지 않습니다. datagridview에는 열이없고 treeview는 보이지 않거나 하드 코딩 된 항목이 없습니다. Family.views.pyPyQt5 : QWidgets에 아무런 데이터도 표시되지 않습니다.

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) 

모듈 : specie.views.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) 

모듈

app.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 
(210)

이 코드의 결과는 제공 : enter image description here

가 다시 나를 도울 수 있기를 바랍니다,

미리 감사 당!

+0

너무 많은 코드입니다. 그걸 [mcve]로 축소하십시오. – Murphy

답변

1

FamilyTreeViewQWidget에서 파생하고자하는 이유는 확실하지 않습니다. 나는 QTreeView에서 직접 파생 된 솔루션을 만들었습니다. 귀하의 addItems 메서드가 올바르게 작동하지만, 의구성원 QStandardItem을 상위 부모 (즉, 루트)로 사용했습니다.

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) 

EventsTableView 클래스에도 몇 가지 문제가 있습니다. QTableWidget을 상속받습니다 (즉, QTableWidget 임). 그러나 아직 불필요한 내부 QTableWidget을 정의합니다. 다음은 더 나은 버전입니다.

class EventsTableView(QTableWidget): 
    """description of class""" 
    def __init__(self, *args): 
     QTableWidget.__init__(self, *args) 

     self.setColumnCount(3) 
     self.setHorizontalHeaderLabels(('Date', 'Catégorie', 'Description')) 
+0

왜 datagridview에 (헤더) 열이 표시되지 않는지 아십니까? –

+0

헤더 문제를 해결하기 위해 편집되었습니다. –

관련 문제