首页 > 解决方案 > 小部件未显示在最大化的 PyQt5 窗口中

问题描述

这是我的代码:

import sys
from PyQt5 import QtWidgets

class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
    super().__init__()

    self.showMaximized()
    self.setWindowTitle("MyCoolBrowser")
    self.label = QtWidgets.QPushButton("Click me", self)
    self.label.setGeometry(0, 0, 50, 50)

app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

运行代码时,我的按钮未显示在窗口中。但是,当我删除“self.showMaximized()”行时,就会显示按钮。有人可以帮忙吗?

标签: pythonpyqt5

解决方案


作为子级创建的小部件(未添加到布局中)在其父级已显示后不会自动显示。

简单的解决方案是在创建按钮showMaximized() 移动,因为在创建所有对象show()调用任何相关函数始终是一种好习惯。

好的答案是正确设置一个中央小部件(这是 QMainWindow 显示为其主要内容的内容),如果要显示更多小部件,则可能使用布局管理器,并避免尝试使用固定几何图形(大小和位置)被认为是一种不好的做法(如果需要,使用垫片或拉伸):

import sys
from PyQt5 import QtWidgets

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("MyCoolBrowser")
        container = QtWidgets.QWidget()
        self.setCentralWidget(container)

        layout = QtWidgets.QVBoxLayout(container)

        self.label = QtWidgets.QPushButton("Click me")
        layout.addWidget(self.label)

        self.editor = QtWidgets.QLineEdit()
        layout.addWidget(self.editor)

        # add a "stretch" at the bottom of the layout in order to 
        # "push" everything on top
        layout.addStretch()

        self.showMaximized()

app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

推荐阅读