我只创建了一个框架,想计算它的高度,我可以在构造函数中得到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()
print(self.frame.height())
另一种可能是使用sizeHint,它根据widget的内容返回默认大小(QLabels)。
self.setCentralWidget(self.frame)
print(self.frame.sizeHint().height())