Задать вопрос
@soja

В чём может быть ошибка?

надо написать маленький код: окно где предлагается выбрать количество цветов, а затем и сами цвета. Флаг с рандомными цветами получился, перекрасить при выборе цвета тоже, а вот именно это задание-нет. Сама проблема в том, что при выборе второго цвета, окно закрывется
import sys
from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QInputDialog, QColorDialog
from PyQt5.QtGui import QPainter
import copy


class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        self.draw = None
        self.base = [80, 80, 120, 30]

    def initUI(self):
        self.setGeometry(300, 300, 500, 500)
        self.setWindowTitle('Flag')

        self.button_1 = QPushButton(self)
        self.button_1.move(20, 40)
        self.button_1.setText("выбери кол-во цветов")
        self.button_1.clicked.connect(self.run)

    def run(self):
        i, okBtnPressed = QInputDialog.getInt(self, "введите число", "сколько цветов?", 2, 1, 10, 1)
        if okBtnPressed:
            self.draw = i
            self.flag = None

    def paintEvent(self, event):
        if self.draw:
            qp = QPainter()
            qp.begin(self)
            self.drawFlag(qp)
            qp.end()

    def drawFlag(self, qp):
        base = copy.copy(self.base)
        for i in range(self.draw):
            color = QColorDialog.getColor()
            if color.isValid():
                qp.setBrush(color.name())
                qp.drawRect(*base)
            base[1] += 30
        self.draw = None


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())
  • Вопрос задан
  • 119 просмотров
Подписаться 1 Простой Комментировать
Решение пользователя Олег Котов К ответам на вопрос (1)
AgeofCreations
@AgeofCreations
Python, AsyncIO, AMQP
Зная привередливость PyQt, полагаю, что стоит попробовать перенести все исполняемые функции во второй поток, оставив в первом только UI и обработчики сигналов. У тебя там цикл, а циклы в основном потоке он очень уж не любит. Если даже проблема не решится, это всё равно будет полезным.
Ответ написан
Комментировать