PyQt5: программа вылетает после добавления определенного количества кнопок pu sh в GridLayout - PullRequest
0 голосов
/ 28 мая 2020

Делаю сетку из пу sh пуговиц. Я понял, что если я создам сетку со строками> 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)

1 Ответ

0 голосов
/ 28 мая 2020

Попробуй

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


Код работает! Заметил, что сетка выходит за окошко. Есть ли быстрое решение для этого?

Попробовать

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)                                          # +++ self
        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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...