Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Отрисовка линии за курсором мышки [RSS Feed]

#1 Март 31, 2014 15:43:05

WotS
Зарегистрирован: 2013-04-15
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Отрисовка линии за курсором мышки

Друзья, рад вас приветствовать. В Python я новичок. Изучаю PyQt. Появилась следующая задача: имеется окно, в окне пользователь водит мышкой. Требуется, создать вертикальную и горизонтальную линии, которые следуют за курсором мышки. Эти линии перпендикулярны друг другу. Точка их пересечения — это координаты курсора мышки. Не могу понять, как это реализовать. То есть, вертикальная линия двигается только по оси Ох, а горизонтальная, соответственно, только по оси Оу. На «теоритическом/идейном» уровне я себе представляю что нужно сделать. Но реализовать никак не удаётся.

    def mouseMoveEvent(self, e):
        self.setMouseTracking(True)
        x = e.x()
        y = e.y()
Таким образом я нахожу координаты мышки. А как дальше их отправить на «отрисовывание» линий не знаю.
    def paintEvent(self, event):
        painter = QtGui.QPainter()
        painter.begin(self)
        self.drawLines(painter)
        painter.end()
То есть, я не знаю как описывать метод drawLines.

Очень надеюсь на вашу помощь. Спасибо за потраченное время!

Офлайн

#2 Апрель 1, 2014 04:26:56

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Отрисовка линии за курсором мышки

#!/usr/bin/env python3
 
"""
Basing on: ZetCode PyQt4 tutorial
 
Draws a cross of two lines over the mouse pointer.
"""
 
import sys
from PyQt4 import QtGui, QtCore
 
class Example(QtGui.QWidget):
 
    def __init__(self):
        super(Example, self).__init__()
 
        self.initUI()
 
    def initUI(self):
 
        self.setMouseTracking(True)
        self.painting_on = False
        self.mx, self.my = 0, 0
 
        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('Lines')
        self.show()
 
    def mousePressEvent(self, e):
 
        self.painting_on = e.button() == QtCore.Qt.LeftButton
 
    def mouseMoveEvent(self, e):
 
        self.mx, self.my = e.x(), e.y()
        self.repaint()
 
    def paintEvent(self, e):
 
        if not self.painting_on:
            return
 
        qp = QtGui.QPainter()
        qp.begin(self)
        self.drawLines(qp, self.mx, self.my)
        qp.end()
 
    def drawLines(self, qp, x, y):
 
        pen = QtGui.QPen(QtCore.Qt.black, 1, QtCore.Qt.SolidLine)
 
        geom = self.geometry()
        gw, gh = geom.width(), geom.height()
 
        qp.setPen(pen)
        qp.drawLine(x, 0, x, gh)
        qp.drawLine(0, y, gw, y)
 
 
def main():
 
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
 
 
if __name__ == '__main__':
    main()



Отредактировано py.user.next (Апрель 1, 2014 22:42:58)

Офлайн

#3 Апрель 1, 2014 14:05:57

WotS
Зарегистрирован: 2013-04-15
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Отрисовка линии за курсором мышки

Большое спасибо! Выручили!

Офлайн

#4 Май 13, 2014 15:29:49

WotS
Зарегистрирован: 2013-04-15
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Отрисовка линии за курсором мышки

Друзья, рад вас приветствовать. Никак не получается немного переделать данную задачу под слудующую: имеется картинка и необходимо поверх неё отрисовать прямоугольник. Пользователь водит мышкой по картинке и прямоугольник принимает цвет того пикселя, на котором в данный момент оказывается курсор мышки. Координаты мышки берутся отсюда:

    def mousePressEvent(self, e):
        self.painting_on = e.button() == QtCore.Qt.LeftButton
        if e.button() == QtCore.Qt.LeftButton:
            self.cs[self.count][0] = e.x()
            self.cs[self.count][1] = e.y()
            self.count += 1
    def mouseMoveEvent(self, e):
        self.mx, self.my = e.x(), e.y() #координаты курсора мыши
        self.repaint()
Функция, которая определяет цвет пикселя по указанным координатам:
    def getPixelColor(self, x, y):
        rgb = self.img.pixel(x, y)
        color = QtGui.QColor(rgb)
        text = (color.red(), color.green(), color.blue())
        return text
А как описать функцию, которая изменяет цвет прямоугольника не знаю. Очень надеюсь на вашу помощь. Спасибо за потраченное время!

Отредактировано WotS (Май 13, 2014 15:30:37)

Офлайн

#5 Май 15, 2014 10:26:02

WotS
Зарегистрирован: 2013-04-15
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Отрисовка линии за курсором мышки

Сделал:

def drawSquare(self, painter, x, y):
	t = self.getPixelColor(x, y)
	color = QtGui.QColor(t[0], t[1], t[2])
	painter.setPen(color)
	painter.setBrush(color)
	painter.drawRect(self.img.width() + 10, 10, 10, 10)

Вызов:
self.drawSquare(painter, self.mx, self.my)

Офлайн

  • Начало
  • » GUI
  • » Отрисовка линии за курсором мышки[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version