首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QListWiget - Flow "BottomToTop"?

QListWiget - Flow "BottomToTop"?
EN

Stack Overflow用户
提问于 2020-07-30 01:03:45
回答 2查看 111关注 0票数 0

我想知道缺失的flow()属性"BottomToTop“是否有解决方法?

我目前正在做一个小小的宠物项目。一个简单的QListWidget,包含一个由用户添加的定制QWidget项。这部分没问题。我只想要列出的项目是"BottomToTop“。有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2020-07-31 21:56:23

是否只需要在列表的底部而不是顶部插入新元素?

我假设你的列表的开头是你所谓的底部?

如果是这样,您可以使用QListWidget::insertItem

代码语言:javascript
复制
yourListWidget->(0, yourNewWidgetItem);
票数 0
EN

Stack Overflow用户

发布于 2020-08-08 06:04:31

这是我一直在问的问题的最接近的解决方案(归功于-ymoreau的Spacer想法)。但我对此并不完全满意。当添加了足够多的项目并且滚动条出现时,底部会出现一个令人讨厌的(在我看来)空白区域。有什么解决方案吗?和ofc。有没有更优雅的解决方案呢?在我看来有点过分了..。

代码语言:javascript
复制
from PyQt5.QtWidgets import (QApplication, QWidget, QListWidget,
                             QListWidgetItem, QVBoxLayout, QHBoxLayout,
                             QPushButton, QSpacerItem, QLabel, QSizePolicy)
from PyQt5.QtCore import QSize
from PyQt5 import QtCore

import sys


class SpacerWidget(QWidget):
    def __init__(self, parent=None):
        super(SpacerWidget, self).__init__(parent)

        self.spacer = QSpacerItem(self.width(), self.height(),
                                  QSizePolicy.Expanding,
                                  QSizePolicy.Expanding)

        self.setStyleSheet("border: none;")
        
        self.layout = QHBoxLayout()
        self.layout.setSpacing(0)
        self.layout.setContentsMargins(0, 0, 0, 0)

        self.layout.addItem(self.spacer)
        self.setLayout(self.layout)


class SpacerWidgetItem(QListWidgetItem):
    def __init__(self, parent=None):
        super(SpacerWidgetItem, self).__init__(parent)

    def setSize(self, width, new_height):

        if new_height < 10:
            self.setSizeHint(QSize(0, 0))
        else:
            self.setSizeHint(QSize(width, new_height))
        

class ItemWidget(QWidget):
    def __init__(self, parent=None):
        super(ItemWidget, self).__init__(parent)

        self.left_label = QLabel("Some info!")
        self.left_label.setMaximumHeight(35)
        self.left_label.setAlignment(QtCore.Qt.AlignLeft)

        self.right_label = QLabel("Some other info!")
        self.right_label.setMaximumHeight(35)
        self.right_label.setAlignment(QtCore.Qt.AlignRight)
        
        self.layout = QHBoxLayout()
        self.layout.setSpacing(0)
        self.layout.addWidget(self.left_label)
        self.layout.addWidget(self.right_label)
        self.setLayout(self.layout)
        

class Widget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        
        self.resize(300, 320)

        self.itemsinlist = 0

        self.layout = QVBoxLayout()

        self.add_btn = QPushButton("Add Item")
        self.add_btn.setMinimumSize(QSize(300, 50))
        self.add_btn.clicked.connect(self.addListItem)
        
        self.list_w = QListWidget()
        self.list_w.setMinimumSize(300, 270)
        self.list_w.resize(300, 270)
        self.list_w.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.list_w.setResizeMode(1)

        self.spacer = SpacerWidgetItem(self.list_w)
        self.spacer.setSizeHint(QSize(self.list_w.minimumWidth(),
                                      self.list_w.minimumHeight()))

        self.spacer_widget = SpacerWidget()
        
        self.list_w.addItem(self.spacer)
        self.list_w.setItemWidget(self.spacer, self.spacer_widget)

        self.layout.addWidget(self.list_w)
        self.layout.addWidget(self.add_btn)
        self.layout.setContentsMargins(1, 1, 1, 1)
        self.layout.setSpacing(0)

        self.setLayout(self.layout)

        self.show()

    def addListItem(self):

        new_label = QListWidgetItem(self.list_w)
        new_label.setSizeHint(QSize(self.list_w.minimumWidth(), 35))

        new_label_widget = ItemWidget()

        self.list_w.addItem(new_label)
        self.list_w.setItemWidget(new_label, new_label_widget)
        self.list_w.scrollToBottom()
        self.itemsinlist += 1
        self.spacer.setSize(self.width(),
                            self.list_w.height() -
                            (self.itemsinlist * 35)-2)

    def resizeEvent(self, event):
        self.spacer.setSizeHint(QSize(self.width(),
                                      self.list_w.height() -
                                      (self.itemsinlist * 35)-2))
        self.list_w.scrollToBottom()


def main():

    app = QApplication(sys.argv)
    wid = Widget()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63158817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档