2016-04-24 13 views
0

ラベルを含む水平フレームを垂直フレーム内に含めることを試みていますが、ラベルが表示されていても正しい位置になくても標準のQLabelサブクラスQFrameがレイアウトに調整されていません

class Logo(QFrame): 
    def __init__(self, parent): 
     super().__init__(parent) 
     layout = QBoxLayout(QBoxLayout.LeftToRight) 
     text = QLabel("PyTitle", self) 
     text.setAlignment(Qt.AlignCenter) 
     text.setFont(QFont("impact", 48)) 
     layout.addWidget(text, 0, Qt.AlignCenter) 
     self.setLayout(layout) 
     self.show() 

結果がこれであるモジュール

class Launcher(QMainWindow): 
    def __init__(self): 
     super().__init__() 
     self.setFrame() #sets up window's geometry, works fine 
     self.setContent() 
     self.show() 

    def setContent(self): 
     layout = QBoxLayout(QBoxLayout.TopToBottom) 
     layout.addWidget(widgets.Logo(self), 0, Qt.AlignTop) 
     self.setLayout(layout) 

そして、これは "ウィジェット" からインポートするクラスです:

これはメインクラスです enter image description here

QLabelとQFrameの両方を強制的にサイズ変更すると、表示されますが左上に表示されます。

+0

QBoxLayoutではなくQBoxLayoutを使用する理由はありますか?左から右にスタックされたウィジェットをたくさん用意したい場合は、QHBoxLayoutを使用してください。上から下に積み重ねる場合は、QVBoxLayoutを使用してください。私は決してQBoxLayoutを台無しにしません。 QBoxLayoutのドキュメントから: "便利なコンストラクタのために、QBoxLayoutではなくQVBoxLayoutとQHBoxLayoutを使用したいと思うでしょう。 – neuronet

答えて

1

QMainWindowには既にレイアウトが設定されています(ドックウィジェット、メニューバー、ステータスバーなどを処理するため)。

は代わりに、central-widgetを設定し、それにすべてのウィジェットやレイアウトを追加します。

class Launcher(QMainWindow): 
    ... 
    def setContent(self): 
     widget = widgets.Logo(self) 
     self.setCentralWidget(widget) 

は(PS:あなたが唯一のトップレベルウィンドウにshow()を呼び出す必要があります - それはだ、他のすべての子ウィジェットのために冗長)。

関連する問題