2017-02-10 3 views
0

J'ai créé une interface graphique avec le hepl de QtCreator -> QtDesigner. Le fichier s'appelle mainwindow.ui. Avec l'aide de pyuic5 j'ai créé mainwindow.pyEn Python, comment utiliser le fichier de module d'interface graphique créé dans QtDesigner

pyuic5 mainwindow.ui > mainwindow.py 

et voici comment il ressemble:

from PyQt5 import QtCore, QtGui, QtWidgets 

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName("MainWindow") 
     MainWindow.resize(400, 300) 
     self.centralWidget = QtWidgets.QWidget(MainWindow) 
     self.centralWidget.setObjectName("centralWidget") 
     self.frame = QtWidgets.QFrame(self.centralWidget) 
     self.frame.setGeometry(QtCore.QRect(30, 20, 341, 191)) 
     self.frame.setFrameShape(QtWidgets.QFrame.Panel) 
     self.frame.setFrameShadow(QtWidgets.QFrame.Sunken) 
     self.frame.setObjectName("frame") 
     MainWindow.setCentralWidget(self.centralWidget) 
     self.menuBar = QtWidgets.QMenuBar(MainWindow) 
     self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 23)) 
     self.menuBar.setObjectName("menuBar") 
     MainWindow.setMenuBar(self.menuBar) 
     self.mainToolBar = QtWidgets.QToolBar(MainWindow) 
     self.mainToolBar.setObjectName("mainToolBar") 
     MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar) 
     self.statusBar = QtWidgets.QStatusBar(MainWindow) 
     self.statusBar.setObjectName("statusBar") 
     MainWindow.setStatusBar(self.statusBar) 

     self.retranslateUi(MainWindow) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 

    def retranslateUi(self, MainWindow): 
     _translate = QtCore.QCoreApplication.translate 
     MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 

et je voulais importer dans mon script principal main.py:

#!/usr/bin/env python3 

from PyQt5.QtCore import * 
from PyQt5.QtGui import * 
from PyQt5.QtWidgets import * 
from mainwindow import * 
import sys 


def main(): 
    app = QApplication(sys.argv) 
    instance = Ui_MainWindow() 
    #instance.show() 
    sys.exit(app.exec_()) 


if __name__ == "__main__": 
    main() 

.. .mais il ne se passe rien quand je le lance. Comment mon main.py devrait-il utiliser ce module gui?

+1

Voir la documentation PyQt: http://pyqt.sourceforge.net/Docs/PyQt5/designer.html –

Répondre

0

Ok, je l'ai moi-même pensé. Pour utiliser un fichier graphique en Python, créé en QtCreator appelé mainwindow.py, mon main.py devrait ressembler à ceci:

#!/usr/bin/env python3 

from PyQt5.QtCore import * 
from PyQt5.QtGui import * 
from PyQt5.QtWidgets import * 
from mainwindow import * 
import sys 

class Main(QMainWindow): 
    def __init__(self): 
     super().__init__() 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 
     self.show() 


def main(): 
    app = QApplication(sys.argv) 
    instance = Main() 
    #instance.show() 
    sys.exit(app.exec_()) 


if __name__ == "__main__": 
    main() 

Ma classe principale (QMainWindow) doit avoir un parent QMainWindow et non QWidget parce QWidget n'a pas de setCentralWidget méthode qui est nécessaire dans mainwindow.py.