@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_())
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
AgeofCreations
@AgeofCreations
Python, AsyncIO, AMQP
Зная привередливость PyQt, полагаю, что стоит попробовать перенести все исполняемые функции во второй поток, оставив в первом только UI и обработчики сигналов. У тебя там цикл, а циклы в основном потоке он очень уж не любит. Если даже проблема не решится, это всё равно будет полезным.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы