子类 QFrame 不适应它的布局

Subclassed QFrame not adjusting to it's layout

我试图在垂直框架内包含一个包含标签的水平框架,但即使显示了标签,它的位置也不正确,并且限制为标准 QLabel 的大小

这是主要的class:

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)

这是从 "widgets" 模块

导入的 class
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()

结果是这样的:

如果我强行调整 QLabel 和 QFrame 的大小,它是可见的,但仍然在左上角。

您不能在 QMainWindow 上设置布局,因为它已经内置了布局(用于处理停靠栏小部件、菜单栏、状态栏等)。

相反,设置 central-widget,并将所有小部件和布局添加到其中:

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

(PS:您只需在顶层调用 show() window - 对于所有其他子部件,这是多余的。