Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Другие библиотеки _ [PyQt] Рисование на виджете по кнопке

Автор: darktroll 20.4.2013, 12:27

Ребята, срочно нужна помощь. Сам уже весь мозг сломал. Суть вопроса. Есть простая форма, на ней QSlider и кнопка QPushButton. Необходимо по нажатию кнопки в месте, где находится ползунок слайдера, ставить вертикальную черту.

Как я понял, рисовать на виджете можно только в событии paintEvent. Ок, наследуюсь от QSlider:

QtGui.QSlider.paintEvent(self, event)
paint = QtGui.QPainter(self)
paint.setPen(QtGui.QPen(QtCore.Qt.darkGray, 2, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap))
paint.setBrush(QtGui.QBrush(QtCore.Qt.gray, QtCore.Qt.SolidPattern))
paint.drawLine(10, 0, 10, 100)

Так рисует. Но мне надо при нажатии на кнопку. Если этот же код вызывать вне события paintEvent, то консоль ругается и не рисует:
QPainter::begin: Paint device returned engine == 0, type: 1
Подскажите плиз, как решить проблему?

Автор: lanz 22.4.2013, 9:51

Сделать флаг - рисовать или нет. По нажатью на кнопку менять флаг/вызывать update слайдера.
В самом слайдере сделать условное рисование:

if self.drawLine:
    paint = QtGui.QPainter(self)
    paint.setPen(QtGui.QPen(QtCore.Qt.darkGray, 2, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap))
    paint.setBrush(QtGui.QBrush(QtCore.Qt.gray, QtCore.Qt.SolidPattern))
    paint.drawLine(10, 0, 10, 100)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)