为什么在创建大量QPushButtons时使用PyQt5的Python会变慢?

时间:2015-12-07 06:03:07

标签: python pyqt5

我正在PyQt5中构建一个更大的程序。我想在ScrollArea中创建大量可点击的QPushButtons。

据我所知,程序到目前为止工作,但是当按钮数量变高(大约10,000到20,000个字符)时,程序变得很慢。

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

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_()

1 个答案:

答案 0 :(得分:1)

显然,大量的qpushbuttons是“昂贵的”并且减慢了程序的速度。因此,似乎无法立即生成10,000到20,000个qpushbuttons。

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