2017-06-18 9 views
1

私はPyQt4のウィジェットを正しくサブクラス化できないようなPython初心者です。当初、私はQDockWidgetオブジェクトを作成し、以下のようにメインウィンドウにそれを追加しました:Python newbieがPyQt4ウィジェットを正しくサブクラス化できないようです。

うまく働い
from PyQt4.QtCore import * 
from PyQt3.QtGui import * 

class MainWindow(QMainWindow): 

    def __init__(self, parent=NONE): 
     toolWindow1 = QDockWidget("Tool Window 1", self) 
     self.addDockWidget(Qt.LeftDockWidgetArea, toolWindow1) 

を。さて、私はQDockWidgetをサブクラス化したいと思います。私は「ToolWindows.py」と呼ばれる新しいファイルを作成し、そこに次のクラスを追加します。

from PyQt.QtCore import * 
from PyQt4.QtGui import * 

class BasicToolWindow(QDockWidget): 

    def __init__(self, parent=NONE): 
     super(BasicToolWindow, self).__init__(parent) 

は、その後、私は次のようにメインウィンドウでそれを作成しよう:

toolWindow1 = BasicToolWindow("Tool Window 1", self) 

これは、次のエラーが発生します実行時に: "()は最大で2つの引数をとります(3が与えられます)"。誰かが私がここで間違っていることを説明してください、誰かがオンラインでサブクラス化の良い説明に私を指摘できますか?私は自分自身を見つけることに成功していない。ありがとうございました!

+0

は__init__' 'に' title'引数を追加し、基本クラスにそれを渡します。 – ekhumoro

+0

ありがとうございます。私は実際にそれを最初に試みましたが、構文を正しく取得できませんでした。正しい構文は何ですか?私は私を捨てているのは "親"の議論だと思う...現時点ではそれほど得意ではない。 – LKeene

+0

私はそれをさらに説明するために答えを加えました。 – ekhumoro

答えて

1
def __init__(self, parent=NONE): 

これには2つの引数があります。また、あなたがそうするとき

toolWindow1 = BasicToolWindow("Tool Window 1", self) 

それは引数に暗黙的に "自己"を与えるでしょう。あなたが残したのは、「ツールウィンドウ1」で埋め尽くした親の引数です。

基本的に、BasicToolWindowにself、 "Tool Window 1"、およびselfの3つの引数を指定しました。コンパイラが幸せではなかった理由です。

1

QDockWidgetクラスには2つのコンストラクタがあります。他だけフラグをとりながら一つは、タイトルフラグをとります。あなたはBasicToolWindowサブクラスのインスタンスを作成する際にこれらの引数を使用する場合は、その__init__の署名でそれらを定義する必要があります。

class BasicToolWindow(QDockWidget): 
    def __init__(self, title, parent=None): 

引数はQDockWidget C++のコンストラクタとデフォルトにしてオプションですNULL(つまり親はありません) - このため、PyQt相当のparent=Noneが追加されています。 フラグ引数は非常にめったに必要ではなく、Qtは既定値を提供しているので省略されています。今

class BasicToolWindow(QDockWidget): 
    def __init__(self, title, parent=None): 
     super(BasicToolWindow, self).__init__(title, parent) 

あなたがBasicToolWindowを作成し、基礎となるドックウィジェットの:QDockWidgetコンストラクタは、それが期待する引数を取得するように

これらの引数は、superを介してベース・クラス__init__に渡さする必要がありますタイトルが設定され、メイン・ウィンドウ(すなわちself)その親になっている:

toolWindow1 = BasicToolWindow("Tool Window 1", self) 
+0

ニースとクリア! – LKeene

関連する問題