2017-11-01 10 views
0

私はPyQt5を使ってアプリケーションを作成しています。問題は、自分のウィンドウが表示されますが、ウィジェットがなく(つまり、Mainクラスがなく、メニュー、ツールバーなどがなくても)、まだ空です。私はPython-3.6とPyQt5、Windows 10環境を使用しています。ここでPyQt5:ウィジェットのないメインウィンドウ

は私のコードです:

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) 

     # init menu 
     menubar = QMenuBar() 
     fileMenu = menubar.addMenu('File') 

     #init toolbar 
     exitAct = QAction(QIcon('exit24.png'), 'Exit', self) 
     exitAct.setShortcut('Ctrl+Q') 
     exitAct.triggered.connect(qApp.quit) 

     toolbar = QToolBar() 

     # load ihm 
     main = Main() 
     centWidget = QWidget() 

     # widget centralizer 
     window = QGridLayout() 
     window.addWidget(main, 0, 0) 
     centWidget.setLayout(window) 

     self.setCentralWidget(centWidget) 

     #status bar 
     statusBar = QStatusBar().showMessage('Bienvenue dans TerraSoft') 

     # show ihm 
     self.show() 
     main.show() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    ex = TerraSoft() 
    ex.show() 
    sys.exit(app.exec_()) 

.views(メイン)

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): 
    """description of class""" 
    def __init__(self, *args): 
     QWidget.__init__(self, *args) 

     # init elements of widget 
     familyTreeView = FamilyTreeView(self) 
     eventsTableView = EventsTableView(self) 

     #init splitters 
     HSplitter = QSplitter(Qt.Horizontal) 
     VSplitter = QSplitter(Qt.Vertical) 

     # add elements to splitters 
     HSplitter.addWidget(familyTreeView) 
     HSplitter.addWidget(eventsTableView) 


     grid = QGridLayout() 
     grid.addWidget(HSplitter) 

マイモジュールfamily.views(私は将来的に.modelsを追加したいのですが、他のものの1つ):

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:あなたは、以下の結果を確認でき

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')) 

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) 
     HSplitter.setStretchFactor(1, 1) 

     grid = QGridLayout() 
     grid.addWidget(HSplitter) 
     self.setLayout(grid) 

このTerraSoftクラス:

You can see the result bellow:

答えて

1

はあなたの例を修正するには、この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') 

このFamilyTreeViewクラス:

class FamilyTreeView(QTreeView): 
    def __init__(self, *args): 
     QTreeView.__init__(self, *args) 
     self.setMaximumWidth(300) 
     self.setModel(QStandardItemModel(self)) 
     self.model().setHorizontalHeaderLabels([self.tr("Familles")]) 
     self.addItems(self.model(), families) 

    def addItems(self, parent, elements): 
     for text, children in elements: 
      item = QStandardItem(text) 
      parent.appendRow(item) 
      if children: 
       self.addItems(item, children) 

このEventsTableViewクラス:あなたのソリューションのための

class EventsTableView(QTableWidget): 
    def __init__(self, *args): 
     QTableWidget.__init__(self, *args) 
     self.setColumnCount(3) 
     self.setHorizontalHeaderLabels(('Date', 'Catégorie', 'Description')) 
+0

ありがとう!それは仕事ですが、データはありません(ツリービューは私の家族に表示されません。グリッドビューには列は表示されません: http://www.hostingpics.net/viewer.php?id=668763result.png –

+0

@ Y.Berthoud。私はいくつかの修正で私の答えを更新しました – ekhumoro

+0

試して、それはうまくいきました!私は今統計情報とpymongoの統合のためにグラフを追加します:)私はいくつかの助けが必要な場合、 ) どうもありがとう ! –

関連する問題