python - 如何使 PyQt 中的 QWidget 内容可滚动?

标签 python pyqt qt4

首先,我几个小时前开始使用 PyQt。
到目前为止一切顺利 - 我正在编写 rss 客户端以熟悉 PyQt
我收到了 QApplication , QMainWindow和两个自定义小部件。
第一个自定义小部件是:

class RssItem(QWidget):
    __pyqtSignals__ = ("articleViewed(bool)",
                       "articleOpened(bool)",
                       "articleMarkedGood(bool)")

    def __init__(self, title, date, parent = None):
        super(RssItem, self).__init__(parent)
        self.initWidget(title, date)

    def initWidget(self, title, date):
        title = QLabel(title)
        date = QLabel(date)
        titleBox = QHBoxLayout()
        titleBox.addWidget(title)
        titleBox.addWidget(date)
        self.setLayout(titleBox)

在单行中显示(目前)标题和日期
第二个接受 RssItem 的数组小部件并将它们显示在垂直列表中:
class ItemsList(QWidget):
    def __init__(self, items, parent=None):
        super(ItemsList, self).__init__(parent)
        self.initWidget(items)

    def initWidget(self, items):
        listBox = QVBoxLayout(self)
        for item in items:
            listBox.addWidget(item)
            listBox.addStretch(1)
        self.setLayout(listBox)

如何使此列表可滚动?
保持在中间我打算有多个 ItemList在一个窗口中,每个窗口都应该有自己的滚动条。

目前的主要应用程序功能仅用于测试这两个小部件:
class MainApp(Qt.QApplication):
    def __init__(self, args):
        super(MainApp, self).__init__(args)
        self.addWidgets()
        self.exec_()

    def addWidgets(self):
        self.window = MainWindow()


class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.initUI()

    def initUI(self):
        self.statusBar().showMessage("ok")
        self.resize(640, 480)
        self.setWindowTitle("Smart Rss")
        items=[]
        for x in range(0, 200):
            items.append(RssItem("Title no %s" % x, "2000-1-%s" %x))
        self.setCentralWidget(ItemsList(items))
        self.show()

编辑:越来越近,改变了 ItemList.initWidget
def initWidget(self, items):
    scroll= QScrollArea(self)
    wrap = QWidget(self)
    listBox = QVBoxLayout(self)
    for item in items:
        listBox.addWidget(item)
        listBox.addStretch(1)
    wrap.setLayout(listBox)
    scroll.setWidget(wrap)

但现在我不知道如何制作 QScrollArea填充所有可用空间并在更改时自动调整大小。

最佳答案

试试 scroll.setWidgetResizable(True)就像在这里:

def initWidget(self, items):
    listBox = QVBoxLayout(self)
    self.setLayout(listBox)

    scroll = QScrollArea(self)
    listBox.addWidget(scroll)
    scroll.setWidgetResizable(True)
    scrollContent = QWidget(scroll)

    scrollLayout = QVBoxLayout(scrollContent)
    scrollContent.setLayout(scrollLayout)
    for item in items:
        scrollLayout.addWidget(item)
    scroll.setWidget(scrollContent)

关于python - 如何使 PyQt 中的 QWidget 内容可滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28566161/

相关文章:

python - 删除内部边框

python - PyQt5 和 Django : How to Upload Image using HTTP Request ( Multipart-form )?

python - 在 pyqt4 中的特定小部件(透明标签)上覆盖文本

c++ - 在 Qt4 中隐藏 QMenuBar 的条目?

python - 如何使QComboBox列表中的文本居中?

c++ - Qt 并且没有 moc_*.cpp 文件

python - 通过pypdf在pdf文件上读/写xmp元数据

python - 如何将包含跨越多列的单元格的 html 表格转换为 Python 3 中的列表列表?

javascript - 尝试从 javascript 中的 django 获取列表列表作为 csv 数据,但引号显示在 html 数字中

python - 基于 4 个 Qpoint 的图像正确方向