PyQt4:如何自动调整窗口小部件的大小而不是布局

时间:2015-07-02 05:23:25

标签: python qt pyqt pyqt4

我想用PyQt4实现像虚幻游戏引擎中的蓝图编辑器这样的GUI程序。以下是蓝图编辑器的示例:

enter image description here

首先,我创建一个简单的容器小部件来放置所有组件(矩形)。为了允许用户将矩形放置在他们想要的任何地方(通过拖放),我不能将我的小部件放置在布局中。然后,当矩形的内容改变时,矩形小部件不能自动调整大小本身。

以下是示例代码:

import sys

from PyQt4 import QtCore
from PyQt4 import QtGui


class ChangeableChild(QtGui.QWidget):
    def __init__(self, parent=None):
        super(ChangeableChild, self).__init__(parent)
        self.setLayout(QtGui.QVBoxLayout())

    def addWidget(self, widget):
        self.layout().addWidget(widget)


class MainWidget(QtGui.QWidget):
    def __init__(self, child, parent=None):
        super(MainWidget, self).__init__(parent)
        child.setParent(self)

def main():
    app = QtGui.QApplication(sys.argv)
    changeable_child = ChangeableChild()
    button = QtGui.QPushButton("Add label")
    changeable_child.addWidget(button)
    win = MainWidget(changeable_child)
    win.show()
    button.clicked.connect(
        lambda: changeable_child.addWidget(QtGui.QLabel("A label.")))

    app.exec_()


if __name__ == "__main__":
    main() 

当我点击"添加标签"按钮添加新标签。 ChangeableChild的大小不会自动更改。如果我将ChangeableChild放在布局中,那一切都很好。

当有不在布局中时,有没有办法自动调整我的小部件?或者有没有办法将我的小部件放在一个布局中,仍然可以将它放在绝对位置?

0 个答案:

没有答案