为什么要得到';在创建大量QpushButton时,使用PyQt5的Python速度慢吗?

为什么要得到';在创建大量QpushButton时,使用PyQt5的Python速度慢吗?,python,pyqt5,Python,Pyqt5,我正在PyQt5中构建一个更大的程序。我想在滚动区域中创建大量可单击的QPushButtons按钮 据我所知,该程序迄今为止运行正常,但当按钮数量增加(大约10000到20000个字符)时,速度会非常慢 如何确保此程序生成这些按钮?我需要加载由字符分隔的文本文件作为QPushButtons,通常大约15-20KB大(有时高达50KB)。我认为,这不应该是一个大小限制 import sys from PyQt5.QtWidgets import QApplication, QGridLayout,

我正在PyQt5中构建一个更大的程序。我想在滚动区域中创建大量可单击的QPushButtons按钮

据我所知,该程序迄今为止运行正常,但当按钮数量增加(大约10000到20000个字符)时,速度会非常慢

如何确保此程序生成这些按钮?我需要加载由字符分隔的文本文件作为QPushButtons,通常大约15-20KB大(有时高达50KB)。我认为,这不应该是一个大小限制

import sys
from PyQt5.QtWidgets import QApplication, QGridLayout, QScrollArea, QPushButton, QVBoxLayout, QWidget

class Widget(QWidget):

    def __init__(self, parent= None):
        super(Widget, self).__init__()
        self.setFixedHeight(200)
        self.setFixedWidth(1000)
        self.setGeometry(50, 100, 600, 500)

        widget = QWidget()
        layout = QVBoxLayout(self)

        grid = QGridLayout()
        gridpos = [0, 0]
        number = 15000
        for i in range(number):
            btn = QPushButton('x')
            btn.setCheckable(True)
            grid.addWidget(btn, *gridpos)
            gridpos[1] += 1
            if gridpos[1] == 10:
                gridpos[0] += 1
                gridpos[1] = 0
        layout.addLayout(grid)
        widget.setLayout(layout)

        scroll = QScrollArea()
        scroll.setWidgetResizable(False)
        scroll.setWidget(widget)

        vLayout = QVBoxLayout(self)
        vLayout.addWidget(scroll)
        self.setLayout(vLayout)

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

    dialog = Widget()
    dialog.show()

    app.exec_()

显然,大量的QpushButton是“昂贵的”,会降低程序的速度。因此,似乎没有办法立即生成10000到20000个qpushbuttons按钮


然而,有效的方法是只显示可见的按钮,并在窗口中可见时生成新按钮。

出于好奇,为什么需要10000到20000个按钮?我尝试将文本可视化,其中每个字母都是按钮。然而,我通过显示按钮子集并在下一页上移动索引来解决这个问题。