2017-09-17 3 views
0

J'ai une MainWindow où je veux ouvrir une nouvelle fenêtre.Pyqt 5 nouvelle fenêtre se bloque Mainwindow

Nouvelle fenêtre:

# -*- coding: utf-8 -*- 

# Form implementation generated from reading ui file 'C:\Users\Tareq\Desktop\table.ui' 
# 
# Created by: PyQt5 UI code generator 5.6 
# 
# WARNING! All changes made in this file will be lost! 

from PyQt5 import QtCore, QtGui, QtWidgets 

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName("MainWindow") 
     MainWindow.resize(703, 449) 
     self.centralwidget = QtWidgets.QWidget(MainWindow) 
     self.centralwidget.setObjectName("centralwidget") 
     self.tableWidget = QtWidgets.QTableWidget(self.centralwidget) 
     self.tableWidget.setGeometry(QtCore.QRect(0, 0, 701, 401)) 
     self.tableWidget.setRowCount(48) 
     self.tableWidget.setColumnCount(4) 
     self.tableWidget.setObjectName("tableWidget") 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.menubar = QtWidgets.QMenuBar(MainWindow) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 703, 21)) 
     self.menubar.setObjectName("menubar") 
     MainWindow.setMenuBar(self.menubar) 
     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")) 


if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    MainWindow = QtWidgets.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    sys.exit(app.exec_()) 

J'ai ajouté à mon MainWindow suivant les instructions

self.pushButton_2.clicked.connect(self.create_new_window) 

et la fonction suivante:

def create_new_window(self): 
    from tableWindow import Ui_MainWindow 
    self.tableWindow = Ui_MainWindow 
    self.tableWinow.show() 

Mais après avoir appuyé sur la Bouton2 programm tombe en panne sans étant donné l'erreur ...

Processus terminé avec le code de sortie 1

+0

qu'est ce que 'MainWindow'? – eyllanesc

+0

Mon MainWindow py Où j'ai un bouton @eyllanesc –

+0

essayer avec: 'def create_new_window (auto): de tableWindow import Ui_MainWindow ui = Ui_MainWindow() self.tableWindow = QMainWindow() ui.setupUi (self.tableWindow) auto .tableWindow.show() ' – eyllanesc

Répondre

0

Comme eyllanesc dit qu'il est probablement parce que vous ne l'avez pas importé QMainWindow avant de l'utiliser. Cependant, même alors, il semble que vous en fassiez trop pour créer votre propre "objet" de sous-classement de fenêtre. Il serait beaucoup plus facile (plus de Pythonic?) De sous-classer QMainWindow et de laisser faire le gros du travail.

Essayez ce petit exemple:

import sys 
from PyQt5 import QtCore, QtWidgets 
from PyQt5.QtWidgets import * 

class Second(QtWidgets.QMainWindow): 
    def __init__(self, parent=None): 
     super(Second, self).__init__(parent) 
     #Setting a title, locating and sizing the window 
     self.title = 'My Second Window' 
     self.left = 200 
     self.top = 200 
     self.width = 500 
     self.height = 500 
     self.setWindowTitle(self.title) 
     self.setGeometry(self.left, self.top, self.width, self.height) 
     self.pushButton = QtWidgets.QPushButton("Close Me", self) 
     self.pushButton.clicked.connect(self.on_pushButton_clicked) 
     self.pushButton.move(120,120) 

    def on_pushButton_clicked(self): 
     self.close() 

class First(QtWidgets.QMainWindow): 
    def __init__(self, parent=None): 
     super(First, self).__init__(parent) 
     self.title = 'My First Window' 
     self.left = 100 
     self.top = 100 
     self.width = 500 
     self.height = 500 
     self.setWindowTitle(self.title) 
     self.setGeometry(self.left, self.top, self.width, self.height) 
     self.pushButton = QtWidgets.QPushButton("Open Me", self) 
     self.pushButton.move(120,120) 
     self.pushButton.clicked.connect(self.on_pushButton_clicked)  
     self.newWindow = Second(self) 

    def on_pushButton_clicked(self): 
     self.newWindow.show() 

app = QtWidgets.QApplication(sys.argv) 
main = First() 
main.show() 
sys.exit(app.exec_()) 

Il ouvre juste une fenêtre d'une autre avec un bouton-poussoir.