这个问题特定于PyQt5,但C++Qt5的答案也很好。
在固定宽度和可变高度的QScrollArea内,我有一个
QVBoxLayout
包含
QLabel
s、 这些
QLabels
有
setWordWrap(True)
并包含可能长于
QScrollArea
。当
QLabel公司
包装到4行左右,一切正常,但当
QLabel公司
不仅如此,它无法继续增加
QLabel公司
,并在顶部和底部剪切一些文本。
This answer
试图解决本质上相同的问题,包括设置
QLabel公司
的垂直
sizePolicy()
到
MinimumExpanding
,还有这个
从技术上讲
成功了,但它会迫使
QLabels公司
尝试填充整个
QScrollArea公司
视口(如果视口未填充)
QLabel公司
还没有。
以下是没有
sizePolicy
设置为
最小扩展
(注意1号
QLabel公司
):
以下是当
最小扩展
设置为的垂直大小策略
QLabel公司
s(看起来很棒…):
但当只有少数人
QLabel公司
在滚动区域,这是不可接受的行为,因为这将是一个“评论”服务,人们可以在这里以纯文本形式发布他们的问题:
是否有人对此问题有解决方法,或有类似的经验?
以下是我的一些代码供参考:
class NewsList(QtWidgets.QScrollArea):
def __init__(self, parent=None):
super(NewsList, self).__init__(parent)
self.setMaximumWidth(200)
self.setWidgetResizable(True)
layout = QtWidgets.QVBoxLayout()
layout.setContentsMargins(5, 5, 5, 5)
layout.setSpacing(5)
layout.setAlignment(QtCore.Qt.AlignTop)
self.news_widget = QtWidgets.QFrame()
self.news_widget.setStyleSheet("""
QFrame {
background-color: #ffffff;
}
""")
self.news_widget.setLayout(layout)
self.setWidget(self.news_widget)
self.fetch_news()
def fetch_news(self):
self.append_message('DSADAISH dshadbsasdsadh sd ashd sah dsha dhsa dsa d')
self.append_message('DSADAISH dshadbsasdsadh sd ashd sah dsha dhsa dsa d')
self.append_message('DSADAISH dshadbsasdsadh sd ashd sah dsha dhsa dsa d DSADAISH dshadbsasdsadh sd ashd sah dsha dhsa dsa d')
self.append_message('DSADAISH ')
self.append_message('DSADAISH ')
self.append_message('DSADAISH dshadbsasdsadh sd ashd sah dsha dhsa dsa d')
self.append_message('DSADAISH dshadbsasdsadh sd ashd sah dsha dhsa dsa d')
def append_message(self, text):
new_item = QtWidgets.QLabel(text)
new_item.setWordWrap(True)
new_item.setStyleSheet("""
QLabel {
padding: 4px;
border: 1px solid black;
background-color: #ffffff;
}
""")