crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> [PyQt] Рисование на виджете по кнопке
darktroll
  опции профиля:
сообщение 20.4.2013, 12:27
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 20.4.2013
Пользователь №: 3801

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ребята, срочно нужна помощь. Сам уже весь мозг сломал. Суть вопроса. Есть простая форма, на ней 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
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Сделать флаг - рисовать или нет. По нажатью на кнопку менять флаг/вызывать 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)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 6:20