2017-01-24 2 views
3

J'ai le code suivantComment définir correctement le parent d'un widget dans Pyqt?

from PyQt5 import QtCore, QtGui, QtWidgets 
from mw import Ui_MainWindow as mwin 
from wd import Ui_Form as wdg 

class widget(QtWidgets.QWidget): 
    def __init__(self,parent = None): 
      super(widget,self).__init__(parent) 
      self.ui = wdg() 
      self.ui.setupUi(self) 
      self.show() 

class Main(QtWidgets.QMainWindow): 
    def __init__(self,parent = None): 
     super(Main,self).__init__(parent) 
     self.ui = mwin() 
     self.ui.setupUi(self) 
     self.show() 
     w = widget(self) 
import sys 
if __name__ == '__main__': 
     app = QtWidgets.QApplication(sys.argv) 
     mn = Main() 
     sys.exit(app.exec_()) 

Le Ui est généré par le designer qt et est importé d'un autre fichier.

Lorsque j'exécute le code, la fenêtre principale et le widget sont fusionnés et une erreur de segmentation se produit lorsque je ferme la fenêtre principale.

Lorsque j'ai défini le parent dans le widget sur Aucun, le problème disparaît mais le widget n'a pas de parent.

Je suis incapable de comprendre ce qui ne va pas et comment définir correctement la fenêtre principale en tant que parent du widget?

+1

Vous ne devriez pas utiliser show() dans le constructeur de la classe. Supprimez-les et appelez mn.show() avant de commencer votre QApplication. –

+0

Pouvez-vous également ajouter du code mwin et wdg? –

Répondre

0

Impossible de commenter donc en ajoutant comme réponse. Ce n'est probablement pas la bonne façon mais cela fonctionne.

Solution:

class widget(QtWidgets.QWidget): 
    def __init__(self,parent = None): 
     super(widget,self).__init__() 
     self.ui = wdg() 
     self.ui.setupUi(self) 

     self.parent = parent 

     self.show() 


class Main(QtWidgets.QMainWindow): 
    def __init__(self,parent = None): 
    super(Main,self).__init__(parent) 
    self.ui = mwin() 
    self.ui.setupUi(self) 
    self.show() 
    w = widget(self) 

puis utilisez self.parent

+0

l'idée entière tourne .show() une fois ... et pas plusieurs fois. – ZF007

+0

@Ujjwal Une réponse de bonne qualité nécessite une explication. S'il vous plaît expliquer ce qui est suggéré. –