在一个具有固定宽度和可变高度的QScrollArea中,我有一个QVBoxLayout
,它包含QLabel
s。这些{QLabel
中的文本换行到~4行时,一切都正常,但是当QLabel
需要更多的内容时,它无法继续增加QLabel
的高度,并在顶部和底部切掉一些文本。在
This answer试图解决本质上相同的问题,这涉及到将QLabel
的垂直sizePolicy()
设置为MinimumExpanding
,这在技术上是有效的,但是如果该视口还没有被QLabel
填充,它将迫使{
以下是当前没有将sizePolicy
设置为MinimumExpanding
的情况(注意第一个QLabel
):
以下是将MinimumExpanding
设置为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;
}
""")
通过使用包含新闻项的布局的^{} 方法,可以很简单地解决这一问题:
将标签向上伸展,使标签向上伸展。使用
addStretch
的拉伸因子参数可确保间隔符始终优先于布局中的其他项。相关问题 更多 >
编程相关推荐