Первое, что вам нужно сделать, это спроектировать ваш проект, например, в вашем случае у вас есть два элемента, расположенных вертикально: красный 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()
.