我希望在窗口的左侧有一个固定的尺寸栏,在其中我将按钮,标签等保持在右边,而QPlainTextEdit(作为日志)则在右侧,当出现这种情况时应动态调整其大小。更改整个窗口的大小。
理想情况下,我希望固定左侧,动态调整其右侧大小。
我刚刚在Google上搜索了好几个小时,没有任何运气,希望我没有足够的经验找到简单的解决方案。
答案 0 :(得分:2)
例如,您可以使用QHBoxLayout.setStretch()
from PyQt5.QtWidgets import QWidget,QHBoxLayout, QLabel, QApplication
from PyQt5.QtCore import Qt
class MyWidget(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
layout = QHBoxLayout(self)
label1 = QLabel('This one is fixed', self)
label1.setAutoFillBackground(True)
label1.setStyleSheet('background:green')
label2 = QLabel('This one is flexible', self)
label2.setAlignment(Qt.AlignCenter)
label2.setAutoFillBackground(True)
label2.setStyleSheet('background:red')
layout.addWidget(label1)
layout.addWidget(label2)
# set stretch factor of first item in layout to 0 and of second item to 1
layout.setStretch(0,0)
layout.setStretch(1,1)
self.resize(500,350)
if __name__=="__main__":
app = QApplication([])
w = MyWidget()
w.show()
app.exec()
屏幕截图:
答案 1 :(得分:1)
正如另一个答案所建议的那样,您可以简单地使用Stretch BUT ...也可以将其与不同类型的盒子结合使用,例如:
VCntnr-1 = QVBoxLayout()
VCntnr-1.addWidget(Button1)
VCntnr-1.addWidget(Button2)
VCntnr-1.addStretch(1)
HCntnr-1 = QHBoxLayout()
HCntnr-1.addLayout(VCntnr-1)
HCntnr-1.addWidget(TextBox)
HCntnr-1.addStretch(1)
这将导致您的按钮被静态包含在左上角。当然,取决于您希望左侧排列的方式,它可能包含2个QVBoxLayouts,其中第一个按钮中有一些按钮,第二个按钮中有一些按钮
VCntnr-1 = QVBoxLayout()
VCntnr-1.addWidget(Button1)
VCntnr-1.addWidget(Button2)
VCntnr-2 = QVBoxLayout()
VCntnr-2.addWidget(Button3)
VCntnr-2.addWidget(Button4)
VCntnr-3 = QVBoxLayout()
HCntnr-3.addLayout(VCntnr-1)
HCntnr-3.addStretch(1)
HCntnr-3.addLayout(VCntnr-2)
HCntnr-1 = QHBoxLayout()
HCntnr-1.addLayout(VCntnr-1)
HCntnr-1.addWidget(TextBox)
HCntnr-1.addStretch(1)
因此,容器和Stretchs一起用于动态地和静态地布置您要实现的布局,因此不要卡在单个盒子的布局中,请明智地使用盒子来达到目的。还有一个可以使用的GridLayout。
现在,我已经在QHBoxLayout中将一个Button以及一个Stretch放置在其直接容器的左侧或右侧,并且我已经使用Blank标签作为Spacer(尽管我认为pyqt5有一个称为Spacer的东西)。在Label及其关联对象之间放置一些硬空间。因此,所有这些都是以创造性的方式使用所有点点滴滴,以呈现您要实现的美学效果。
请注意,上述缩进是为了易于阅读,需要在代码中删除。