Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 5, 2012 23:45:10

gevg
Зарегистрирован: 2012-04-03
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT + paintEvent + frame

Здравствуйте.
Пытаюсь рисовать внутри фрейма, и ничего не получается к сожалению. Уже вроде бы всё попробовал и не работает, в чем ошибка?

def paintEvent(self, event):
        paint = QtGui.QPainter()
        paint.begin(self.ui.frame_graphic) #Если просто self, то рисуется за фреймом. а если оставить так то получаю QPainter::drawPoints: Painter not active
        paint.setPen(QtCore.Qt.red)
        size = self.size()
        for i in range(1000):
            x = random.randint(1, size.width()-1)
            y = random.randint(1, size.height()-1)
            paint.drawPoint(x, y)
        paint.end()

Отредактировано gevg (Апрель 5, 2012 23:47:04)

Офлайн

#2 Апрель 6, 2012 00:41:27

alexey-grom
От: Новосибирск
Зарегистрирован: 2012-03-09
Сообщения: 14
Репутация: +  3  -
Профиль   Отправить e-mail  

PyQT + paintEvent + frame

Показали бы весь код, а то у меня все прекрасно работает.
Посмотрите чем мой отличается от вашего http://dumpz.org/192835/



Отредактировано alexey-grom (Апрель 6, 2012 00:57:33)

Офлайн

#3 Апрель 6, 2012 08:06:52

gevg
Зарегистрирован: 2012-04-03
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT + paintEvent + frame

Собственно код, Существует frame_graphic в файле полученном с помощью pyuic

import sys, random, math
from PyQt4 import QtGui, QtCore
from graph import *
class GraphWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
    
    def paintEvent(self, paint):
        paint = QtGui.QPainter(self)
        paint.begin(self)
        paint.setPen(QtCore.Qt.red)
        size = self.size()
        for i in range(1000):
            x = random.randint(1, size.width()-1)
            y = random.randint(1, size.height()-1)
            paint.drawPoint(x, y)
        paint.end()
if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    main = GraphWindow()
    main.show()
    sys.exit(app.exec_())

Офлайн

#4 Апрель 6, 2012 13:54:25

alexey-grom
От: Новосибирск
Зарегистрирован: 2012-03-09
Сообщения: 14
Репутация: +  3  -
Профиль   Отправить e-mail  

PyQT + paintEvent + frame

Смысл в том чтобы рисовать именно на фрейме? Тогда можно обрабатывать paintEvent самого фрейма http://dumpz.org/193029/ Нужно учитывать что self в framePaintEvent будет указывать на фрейм, и, например, self.size() получит размеры именно фрейма, а не всего окна. Здесь форма загружается сразу, а не компилируется предварительно.

Чтобы получить ссылку на фрейм frame_graphic, можно писать self.frame_graphic, а не self.ui.frame_graphic



Офлайн

#5 Апрель 6, 2012 18:08:41

gevg
Зарегистрирован: 2012-04-03
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT + paintEvent + frame

alexey-grom, нет, именно self.ui.frame_graphic.

Вопрос решил, создал создал класс наследующий QFrame, в нем создал def paintEvent
И в нужном мне месте создаю объект этого класса.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version