gpt4 book ai didi

qt - PyQt:在运行时将小部件添加到滚动区域

转载 作者:行者123 更新时间:2023-12-05 01:47:40 25 4
gpt4 key购买 nike

我试图在运行时通过按下按钮来添加新的小部件(在下面的示例中我使用标签)。这里的例子:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Widget(QWidget):

def __init__(self, parent= None):
super(Widget, self).__init__()

btn_new = QPushButton("Append new label")
self.connect(btn_new, SIGNAL('clicked()'), self.add_new_label)

#Container Widget
self.widget = QWidget()
#Layout of Container Widget
layout = QVBoxLayout(self)
for _ in range(20):
label = QLabel("test")
layout.addWidget(label)
self.widget.setLayout(layout)

#Scroll Area Properties
scroll = QScrollArea()
scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
scroll.setWidgetResizable(False)
scroll.setWidget(self.widget)

#Scroll Area Layer add
vLayout = QVBoxLayout(self)
vLayout.addWidget(btn_new)
vLayout.addWidget(scroll)
self.setLayout(vLayout)

def add_new_label(self):
label = QLabel("new")
self.widget.layout().addWidget(label)


if __name__ == '__main__':
app = QApplication(sys.argv)

dialog = Widget()
dialog.show()

app.exec_()

当我启动应用程序时,一切看起来都很好,标签列表正确显示并且它们的大小也正确。但是,当我多次按下按钮添加新标签时,新标签会添加到列表中,但它们的大小会发生变化。列表的所有标签都变小了。

如何修复此错误?

最佳答案

问题是线路:

    scroll.setWidgetResizable(False)

当您向其中添加更多子小部件时,这显然会停止调整小部件的大小(因此它们都会在同一空间中被挤压在一起)。

因此将其重置为 True 并在小部件布局的底部添加一个可拉伸(stretch)空间:

    layout.addStretch()
self.widget.setLayout(layout)
...
scroll.setWidgetResizable(True)
scroll.setWidget(self.widget)

然后在间隔符之前插入新标签:

    def add_new_label(self):
label = QLabel("new")
layout = self.widget.layout()
layout.insertWidget(layout.count() - 1, label)

关于qt - PyQt:在运行时将小部件添加到滚动区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22255994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com