我正在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_()
答案 0 :(得分:1)
显然,大量的qpushbuttons是“昂贵的”并且减慢了程序的速度。因此,似乎无法立即生成10,000到20,000个qpushbuttons。
然而,只有在窗口中显示可见按钮并生成新按钮时才有效。