2017-01-24 34 views
3

私はQTデザイナーで次のコード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_()) 

宇井生成されていて、別のファイルからインポートされます。

コードを実行すると、メインウィンドウとウィジェットの両方がマージされ、メインウィンドウを閉じるとセグメンテーションフォルトが発生します。

ウィジェットの親を[なし]に設定すると問題は発生しますが、ウィジェットには親がありません。

私は何が間違っていて、ウィジェットの親としてメインウィンドウを正しく設定するのか理解できません。

+1

を使用しています。それらを削除し、QApplicationを開始する前にmn.show()を呼び出します。 –

+0

mwinとwdgコードも追加できますか? –

答えて

0

コメントできませんので、回答として追加してください。 これはおそらく正しい方法ではなく動作します。

回避策:

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) 

その後、あなたはクラスのコンストラクタで)(ショーを使用しないでくださいself.parent

+0

アイディア全体が.show()を1回実行していて、複数回ではありません。 – ZF007

+0

@Ujjwal良い品質の答えは説明が必要です。提案されていることを説明してください。 –

関連する問題