Python 在pyqt5中计算init和事件函数之间QWidget问题的高度

Python 在pyqt5中计算init和事件函数之间QWidget问题的高度,python,pyqt,pyqt5,qwidget,Python,Pyqt,Pyqt5,Qwidget,我只创建了一个框架,并想计算它的高度。 我可以在构造函数中得到30(默认值)。 但是后来。我可以得到259(正确值)。有人能给我解释一下吗?我想在init函数中得到正确的值 class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.frame = QWidget(self) vbox = QVBoxLayout(se

我只创建了一个框架,并想计算它的高度。 我可以在构造函数中得到30(默认值)。 但是后来。我可以得到259(正确值)。有人能给我解释一下吗?我想在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)
self.show()
打印(self.frame.height())
另一种可能是使用sizeHint返回小部件基于其内容应具有的默认大小(QLabels)

self.setCentralWidget(self.frame)

打印(self.frame.sizeHint().height())
小部件的几何图形仅在必要时通过优化进行更新。对于构造函数,它还不可见,因此不需要更新

如果要获取大小,则必须在使用show()方法后调用它:

self.setCentralWidget(self.frame)
self.show()
打印(self.frame.height())
另一种可能是使用sizeHint返回小部件基于其内容应具有的默认大小(QLabels)

self.setCentralWidget(self.frame)
打印(self.frame.sizeHint().height())
self.setCentralWidget(self.frame)
self.show()
print(self.frame.height())
self.setCentralWidget(self.frame)
print(self.frame.sizeHint().height())