我希望我的窗口具有以下布局:
该图将来自matplotlib。 我想要一种动态创建此布局的方法,以使其适合任何尺寸的屏幕,而无需更改基本布局。我该怎么做呢?这是到目前为止我得到的:
import sys
from PyQt5.QtWidgets import (QWidget, QPushButton,
QHBoxLayout, QVBoxLayout, QApplication, QFrame, QScrollArea, QListWidget, QListWidgetItem, QLabel)
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
#top left downwards
vbox = QVBoxLayout()
vbox.addStretch(1)
hbox = QHBoxLayout()
hbox.addStretch(1)
hbox.addLayout(vbox)
hbox.setDirection(1)
self.setLayout(hbox)
qlist = QListWidget()
hbox.addWidget(qlist)
for i in range(0,31):
qlist.addItem(str(i))
qlist.setFrameStyle(QFrame.Raised)
vbox2 = QVBoxLayout()
vbox2.addStretch()
graph = QFrame(self)
graph.setStyleSheet("QWidget { background-color: red }" )
vbox2.addWidget(graph)
graph.setFrameShape(1)
self.setStyleSheet("font: 20pt Cambria")
self.showMaximized()
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
哪个给我这个:
有人知道该怎么做吗?我是PyQt5的新手,在查看多个示例后不确定框布局如何工作。有没有一种更简单的方法可以在不影响布局的情况下做到这一点? 谢谢!
答案 0 :(得分:0)
要做的第一件事就是设计项目,例如,您有两个垂直放置的元素:红色的QFrame
和下面的东西,下面的东西命令一个元素处理水平位置,以便它下面必须是QHBoxLayout
,放置QFrame
并在其下面的元素必须是QVBoxLayout
,这是您可以使用以下方案表示的简单结构
QWidget
└── QVBoxLayout
├── QFrame
└── QHBoxLayout
└── QListWidget (with stretch = 1)
我更喜欢先创建小部件,最后将其添加到各自的布局中。
import sys
from PyQt5 import QtWidgets
class Example(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# create widgets
graph = QtWidgets.QFrame()
graph.setFixedHeight(40)
graph.setFrameShape(QtWidgets.QFrame.Box)
graph.setStyleSheet("QWidget { background-color: red }" )
qlist = QtWidgets.QListWidget()
qlist.setFrameStyle(QtWidgets.QFrame.Raised)
qlist.addItems(map(str, range(31)))
# create QHBoxLayout and add QListWidget
hlay = QtWidgets.QHBoxLayout()
hlay.addWidget(qlist)
hlay.addStretch(1)
# create QVBoxLayout and add QFrame and QHBoxLayout
vlay = QtWidgets.QVBoxLayout(self)
vlay.addWidget(graph)
vlay.addLayout(hlay)
self.setStyleSheet("font: 20pt Cambria")
self.showMaximized()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
注意:QFrame
的高度不高,因为它的任务是承担内容的任务,在这种情况下,QFrame
并没有一定的高度,因此我们必须确定一个固定的大小,如果您要向setFixedHeight()
添加元素,请通过布局进行操作,并删除base
的行。