PyQt5:在将一定数量的按钮添加到GridLayout后,程序崩溃

问题描述 投票:0回答:1

我正在制作按钮网格。我意识到,如果创建一个行数大于80且列数大于90的网格,则程序将崩溃。我所谓的“崩溃”是指程序窗口打开一秒钟,然后再次关闭。更奇怪的是,我在命令提示符下没有收到任何错误消息。

有人知道为什么会这样吗?

self.midColLayout = QVBoxLayout()
self.graphWidget = QWidget(self)
self.graphWidget.setStyleSheet("background-color: white; padding:0px;")
self.graphWidget.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)

self.vLayout = QVBoxLayout()
self.hLayout = QHBoxLayout()

self.gridLayout = QGridLayout()
self.gridLayout.setSpacing(0) 
self.hLayout.addLayout(self.gridLayout)
self.vLayout.addLayout(self.hLayout)

self.buttons = []
for x in range(0, 80): # If I put 81, then the program crashes
    l = []
    for y in range(0, 90): # If I put 91, then the program crashes
        self.button = QPushButton()
        l.append(self.button)
        self.gridLayout.addWidget(self.button, x, y)
    self.buttons.append(l)

self.graphWidget.setLayout(self.vLayout)
self.midColLayout.addWidget(self.graphWidget)

python pyqt pyqt5
1个回答
0
投票

尝试一下

import sys
from PyQt5.Qt import *


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

        self.midColLayout = QVBoxLayout()
        self.graphWidget = QWidget(self)                                         ## self
        self.graphWidget.setStyleSheet("background-color: white; padding:0px;")
        self.graphWidget.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)

        self.vLayout = QVBoxLayout()
        self.hLayout = QHBoxLayout()

        self.gridLayout = QGridLayout()
        self.gridLayout.setSpacing(0) 
        self.hLayout.addLayout(self.gridLayout)
        self.vLayout.addLayout(self.hLayout)

        self.buttons = []
        for x in range(0, 80): # If I put 81, then the program crashes
            l = []
            for y in range(0, 90): # If I put 91, then the program crashes
                self.button = QPushButton()
                l.append(self.button)
                self.gridLayout.addWidget(self.button, x, y)
            self.buttons.append(l)

        self.graphWidget.setLayout(self.vLayout)
#?        self.midColLayout.addWidget(self.mapLabel)
        self.midColLayout.addWidget(self.graphWidget)

if __name__ == '__main__':
    myapp = QApplication(sys.argv)
    mywin = Widget()
    mywin.resize(400, 400)
    mywin.show()
    sys.exit(myapp.exec_())

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.