Форум сайта python.su
Здравствуйте.
Пытаюсь рисовать внутри фрейма, и ничего не получается к сожалению. Уже вроде бы всё попробовал и не работает, в чем ошибка?
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)
Офлайн
Показали бы весь код, а то у меня все прекрасно работает.
Посмотрите чем мой отличается от вашего http://dumpz.org/192835/
Отредактировано alexey-grom (Апрель 6, 2012 00:57:33)
Офлайн
Собственно код, Существует 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_())
Офлайн
Смысл в том чтобы рисовать именно на фрейме? Тогда можно обрабатывать paintEvent самого фрейма http://dumpz.org/193029/ Нужно учитывать что self в framePaintEvent будет указывать на фрейм, и, например, self.size() получит размеры именно фрейма, а не всего окна. Здесь форма загружается сразу, а не компилируется предварительно.
Чтобы получить ссылку на фрейм frame_graphic, можно писать self.frame_graphic, а не self.ui.frame_graphic
Офлайн
alexey-grom, нет, именно self.ui.frame_graphic.
Вопрос решил, создал создал класс наследующий QFrame, в нем создал def paintEvent
И в нужном мне месте создаю объект этого класса.
Офлайн