计算pyqt5中init和event函数之间Widget问题的高度

Caculating height of QWidget issue between init and event function in pyqt5

我只创建了一帧,想计算它的高度。 我可以在构造函数中得到 30(默认值)。 但后来。我可以获得 259(correct value) 。谁能给我解释一下?我想在 init 函数中获得正确的值。

class MainWindow(QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()
        self.frame = QWidget(self)
        vbox = QVBoxLayout(self)
        vbox.addWidget(QLabel('11111111'))
        vbox.addWidget(QLabel('11111111'))
        vbox.addWidget(QLabel('11111111'))
        vbox.addWidget(QLabel('11111111'))
        vbox.addWidget(QLabel('11111111'))
        vbox.addWidget(QLabel('11111111'))
        vbox.addWidget(QLabel('11111111'))
        vbox.addWidget(QLabel('11111111'))
        vbox.addWidget(QLabel('11111111'))
        vbox.addWidget(QLabel('11111111'))
        vbox.addWidget(QLabel('11111111'))
        vbox.addWidget(QLabel('11111111'))
        vbox.addWidget(QLabel('11111111'))
        self.frame.setLayout(vbox)
        self.setCentralWidget(self.frame)
        print(self.frame.height())
    def enterEvent(self,event):
        print(self.frame.height())
        pass
if __name__ == "__main__":
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())

小部件的几何形状仅在必要时通过优化进行更新。在构造函数的情况下,它还不可见,因此不需要更新。

如果你想得到大小,那么你必须在使用 show() 方法之后调用它:

self.setCentralWidget(self.frame)
<b>self.show()</b>
print(self.frame.height())

另一种可能性是使用 returns 小部件根据其内容(QLabel)应具有的默认大小的 sizeHint

self.setCentralWidget(self.frame)
print(<b>self.frame.sizeHint().height()</b>)