53457


<https://wiki.qt.io/PySideTutorials_Simple_Dialog_Japanese>  
こちらに載っているコードについてご質問があります。  
下部にコード記載しております。

> def **init** (self, parent=None):  
>  ____super(Form, self). **init** (parent)

という部分にて、初期化関数の引数にparent=Noneとなっておりますが  
なぜparent=Noneとなるのでしょうか？  
parent=QDialogとなるのかな？と思っていたのですが…

> def **init** (self, parent=QDialog):  
>  ____super(Form, self). **init** (parent)

この状態ですと、エラーになりました。  
そもそもクラス宣言の時点でQDialog継承しているから  
Noneになる。という意味になるのでしょうか？  
ご教授の程宜しくお願いいたします。

_  
_  
_  
Code↓

[code]

    from PySide.QtCore import *
    from PySide.QtGui import *
    class Form(QDialog)`
    
        def __init__(self, parent=None):
            super(Form, self).__init__(parent)
            self.edit = QLineEdit("Your Name???")
            self.button = QPushButton("Push!!!")
            layout = QVBoxLayout()
            layout.addWidget(self.edit)
            layout.addWidget(self.button)
            self.setLayout(layout)
            self.button.clicked.connect(self.greetings)
    
        def greetings(self):
            print ("Hello", self.edit.text())
    
[/code]


CC BY-SA 4.0
2019-03-15T18:40:54.637
53456
2019-03-16T04:35:01.213
2019-03-16T04:35:01.213
12561
32555
question
python pyside
Pysideの__init__の引数　Parent＝Noneについて


まず、Pythonの説明からすると、関数定義時の`parent=None`の意味は、引数`parent`のデフォルト値が`None`である、という意味です。  
記載いただいたコードでは、`parent`が指定されなければ、継承元の`QDialog`のコンストラクタ`__init__()`を`__init__(None)`で実行したい、ということでしょう。

次にQt(pyside)について。  
私は使ったことはないのですが、Qtにおける`parent`はクラスの継承とは全く関係がなく、QObject間の親子関係を表すものようですね。

[Qt をはじめよう！ 第7回: Qt のオブジェクトモデルを理解しよう - Qt Japanese
Blog](https://blog.qt.io/jp/2010/05/05/object/)

ということは、parent引数を省略した場合
Noneを指定した場合、他のQtオブジェクトと全く関係のない新規のQtオブジェクトを作成する、ということなのだと思います。

なお、

[code]

    def init(self, parent=QDialog):
    ____super(Form, self).init(parent)
    
[/code]

がエラーになるのは、QDialogがあくまでクラスの名称でしかなく、継承元の`__init__()`に渡せるようなインスタンスではないからです。


CC BY-SA 4.0
2019-03-15T19:17:34.000
53457
2019-03-15T19:17:34.000
12561
53456
answer