Найти - Пользователи
Полная версия: Отрисовка линии за курсором мышки
Начало » GUI » Отрисовка линии за курсором мышки
1
WotS
Друзья, рад вас приветствовать. В 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.

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

py.user.next
#!/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()
WotS
Большое спасибо! Выручили!
WotS
Друзья, рад вас приветствовать. Никак не получается немного переделать данную задачу под слудующую: имеется картинка и необходимо поверх неё отрисовать прямоугольник. Пользователь водит мышкой по картинке и прямоугольник принимает цвет того пикселя, на котором в данный момент оказывается курсор мышки. Координаты мышки берутся отсюда:
    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
Сделал:
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)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB