[英]Dynamic positioning of widgets in PyQt5?
我希望我的窗口具有以下布局:
該圖將來自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的新手,在查看多個示例后不確定框布局如何工作。 有沒有一種更簡單的方法可以在不影響布局的情況下做到這一點? 謝謝!
您要做的第一件事就是設計項目,例如,您有兩個垂直放置的元素:紅色的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()
的行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.