2016-04-15 13 views
0

現在、私はカスタムQWidgetクラスをQVBoxLayoutに追加しようとしています。私が得ている問題は、ウィジェットがレイアウト内に全く現れないということです。私は、デフォルトサイズがゼロに設定されているので、ウィジェットが表示されていないと思ったので、QWidgetの最小サイズを設定しようとしました。私は機能について、ここで心配していないですので、スライダとLCDスクリーンの間で行わシグナルとスロットを削除PyQt5 QLayoutにカスタムQWidgetを追加する

class myWidget(QWidget): 

    def __init__(self): 
     super().__init__() 

     # Slider 
     self.mySlider = QSlider(Qt.Horizontal) 
     self.mySlider.setRange(-360, 360) 

     # LCD Screen 
     self.lcd = QLCDNumber() 
     self.lcd.setMinimumHeight(45) 
     self.lcd.setMaximumHeight(75) 

     # set Size 
     self.setMinimumSize(QSize(400,300)) 

これは、クラスがどのように見えるかを簡略化したものです。直接次のコードでは二つのボタンの間に、私はQSIZE(400300)の灰色の領域を取得するだけ事実:だから

class MainWindow(QMainWindow): 

    def __init__(self): 
     super().__init__() 

     #Create Widgets to be Added to Central Widget 
     self.w1 = QPushButton("First") 
     self.w2 = myWidget() 
     self.w3 = QPushButton("Third") 

     #Set Central Widget and VBox 
     self.central_widget = QWidget() 
     self.setCentralWidget(self.central_widget) 
     self.layout = QVBoxLayout() 
     self.central_widget.setLayout(self.layout) 

     #Add widgets 
     self.layout.addWidget(self.w1) 
     self.layout.addWidget(self.w2) 
     self.layout.addWidget(self.w3) 

私は単純に3つのウィジェットを作成していること、およびQVBoxLayoutにそれらを配置することです中央のウィジェット内で2ボタンウィジェットw1w3が表示されますが、私のカスタムウィジェットは表示されず、setMinimumSizeでウィジェットのサイズを増やすと、灰色のスペースがw1w3の間にのみ追加されます。

ウィジェットはそこにあるため、何らかの理由で表示されません。私はPyQtの新機能ですので、なぜこれが起こったのか説明してください。

答えて

3

QWidgetsは、他のウィジェットのための単なるコンテナです。 A QWidgetのレイアウトとサブウィジェットがない場合は、カスタムペイントやスタイリングをしていない限り、空白のように見えます。

この例では、は実際にカスタムウィジェットにサブウィジェットを追加していません。別のウィジェットにサブウィジェットを追加するには、サブウィジェットの親を設定するか、親ウィジェット(自動的に再両親サブウィジェット)

class myWidget(QWidget): 

    def __init__(self): 
     super().__init__() 

     # Slider 
     self.mySlider = QSlider(Qt.Horizontal) 

のレイアウトにサブウィジェットを追加するいずれかの必要がありますここではQSliderを作成していますが、実際にはMyWidgetの所有ではなく、最終的にQtの所有者になります。メインウィンドウの左上隅に描画されると思います。

このサブウィジェットをMyWidgetにするには、親を設定してレイアウトに追加する必要があります。

class myWidget(QWidget): 

    def __init__(self): 
     super().__init__() 

     self.myLay = QVBoxLayout() 
     self.setLayout(self.myLay) 

     # Notice self is being passed in to set the parent 
     self.mySlider = QSlider(Qt.Horizontal, self) 

     # You need to add widgets to a layout to position them properly 
     self.myLay.addWidget(self.mySlider) 
関連する問題