解决pyqt5中init和事件函数之间的QWidget高度问题。

问题描述 投票:1回答:1

我只创建了一个框架,想计算它的高度,我可以在构造函数中得到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_())
python pyqt pyqt5 qwidget
1个回答
2
投票

小组件的几何体只在必要时通过优化更新。在构造函数的情况下,它还不可见,所以没有必要更新。

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

self.setCentralWidget(self.frame)
self.show()
print(self.frame.height())

另一种可能是使用sizeHint,它根据widget的内容返回默认大小(QLabels)。

self.setCentralWidget(self.frame)
print(self.frame.sizeHint().height())
© www.soinside.com 2019 - 2024. All rights reserved.