我想用PyQt4实现像虚幻游戏引擎中的蓝图编辑器这样的GUI程序。以下是蓝图编辑器的示例:
首先,我创建一个简单的容器小部件来放置所有组件(矩形)。为了允许用户将矩形放置在他们想要的任何地方(通过拖放),我不能将我的小部件放置在布局中。然后,当矩形的内容改变时,矩形小部件不能自动调整大小本身。
以下是示例代码:
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
放在布局中,那一切都很好。
当有不在布局中时,有没有办法自动调整我的小部件?或者有没有办法将我的小部件放在一个布局中,仍然可以将它放在绝对位置?