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

Отображение генерируемых объектов на лету

Как реализовать (pyqt) отображение генерируемых объектов (drawEllipse) в момент их создания (на лету)? Данный код рисует объекты в памяти и потом выводит изображение:

import sys
import random
from PyQt4 import QtGui, QtCore

width=800
height=600

class DrawExample(QtGui.QWidget):
    
    def __init__(self):
        super(DrawExample, self).__init__()
        
        self.initUI()
        
    def initUI(self):      

        self.setGeometry(300, 300, width, height)
        self.setWindowTitle('Draw')
        self.show()

    def paintEvent(self, e):
        
        qp = QtGui.QPainter()
        qp.begin(self)
        
        for i in range(10000):
            x = random.randint(1, width-1)
            y = random.randint(1, height-1)
            color = QtGui.QColor(250,100,100)
            qp.setPen(color)            
            qp.drawEllipse(x-3, y-3, 6, 6)
            
        qp.end()
               
def main():
    
    app = QtGui.QApplication(sys.argv)
    ex = DrawExample()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()


Заранее благодарен за ответ!
  • Вопрос задан
  • 3322 просмотра
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@alz
#!/usr/bin/env python

import sys
import random
from PyQt4 import QtCore, QtGui

WIDTH = 800
HEIGHT = 600

class DrawExample(QtGui.QWidget):
    def __init__(self):
        super(DrawExample, self).__init__()
        
        self.points = []
        
        self.init_ui()
        
        self.startTimer(0)
    
    def init_ui(self):
        self.setGeometry(300, 300, WIDTH, HEIGHT)
        self.setWindowTitle('Draw')
        self.show()
    
    def timerEvent(self, e):
        if len(self.points) < 10000:
            self.points.append((
                random.randint(1, WIDTH-1),
                random.randint(1, HEIGHT-1),
            ))
            self.update()
    
    def paintEvent(self, e):
        qp = QtGui.QPainter()
        qp.begin(self)
        
        color = QtGui.QColor(250, 100, 100)
        qp.setPen(color)
        
        for point in self.points:
            qp.drawEllipse(point[0]-3, point[1]-3, 6, 6)
        
        qp.end()

def main():
    app = QtGui.QApplication(sys.argv)
    ex = DrawExample()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
Ответ написан
@vedmaka
предположу что qp.begin(self) и qp.end() нужно поместить в цикл
Ответ написан
Комментировать
shrimo
@shrimo Автор вопроса
предположу что qp.begin(self) и qp.end() нужно поместить в цикл
Проверил: не работает.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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