Subclassed QFrame不适应它的布局

时间:2016-04-24 18:38:46

标签: qt layout pyqt pyside qframe

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

这是主要课程:

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)

这是来自"小部件的导入类"模块

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()

结果如下: enter image description here

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

1 个答案:

答案 0 :(得分:1)

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

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

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

(PS:您只需要在顶级窗口调用show() - 对于所有其他子窗口小部件,它是多余的。)