【发布时间】:2014-07-18 03:49:38
【问题描述】:
我有一个主要的父窗口小部件,我希望在父窗口小部件之上有几个布局。
使用父窗口小部件初始化布局会将布局放置在父窗口小部件之上。我喜欢这样,并希望为同一个父小部件多次(左侧、顶部、底部和右侧)。
我使用了具有不同子布局的 QGridLayout,但这会导致布局调整大小并迫使它们变小。最后添加的任何叠加层都应该在其他项目之上。
下面是我想要的一个非常简单的例子。
import sys
from PySide import QtGui, QtCore
class Overlay(QtGui.QBoxLayout):
"""Overlay widgets on a parent widget."""
def __init__(self, parent=None, location="left"):
super().__init__(QtGui.QBoxLayout.TopToBottom, parent)
if location == "left" or location == "right":
self.setDirection(QtGui.QBoxLayout.TopToBottom)
if location == "right":
self.setAlignment(QtCore.Qt.AlignRight)
elif location == "top" or location == "bottom":
self.setDirection(QtGui.QBoxLayout.LeftToRight)
if location == "bottom":
self.setAlignment(QtCore.Qt.AlignBottom)
self.css = "QWidget {background-color: lightskyblue; color: white}"
# end Constructor
def addWidget(self, widget):
super().addWidget(widget)
widget.setStyleSheet(self.css)
# end addWidget
# end class Overlay
def main():
app = QtGui.QApplication(sys.argv)
window = QtGui.QMainWindow()
window.show()
widg = QtGui.QTreeView()
window.setCentralWidget(widg)
left = Overlay(widg, "left")
left.addWidget(QtGui.QLabel("HELLO"))
left.addWidget(QtGui.QLabel("WORLD!"))
top = Overlay(widg, "top")
top.addWidget(QtGui.QLabel("Hello"))
top.addWidget(QtGui.QLabel("World!"))
right = Overlay(location="right")
right.setParent(widg)
right.addWidget(QtGui.QLabel("hello"))
right.addWidget(QtGui.QLabel("world!"))
return app.exec_()
# end main
if __name__ == '__main__':
sys.exit(main())
是否有多个布局具有相同的父级?如果没有,是否有某种方法可以创建一个虚拟小部件,该小部件将与父小部件一起移动并让叠加层使用多个虚拟小部件作为其父小部件?
还有
layout = QtGui.QBoxLayout(QtGui.QBoxLayout.TopToBottom, parent_widget)
不做同样的事情
layout = QtGui.QBoxLayout(QtGui.QBoxLayout.TopToBottom)
layout.setParent(parent_widget)
初始化对不同的父级做了什么?
【问题讨论】: