Форум сайта python.su
Друзья, рад вас приветствовать. В 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()
Офлайн
#!/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)
Офлайн
Большое спасибо! Выручили!
Офлайн
Друзья, рад вас приветствовать. Никак не получается немного переделать данную задачу под слудующую: имеется картинка и необходимо поверх неё отрисовать прямоугольник. Пользователь водит мышкой по картинке и прямоугольник принимает цвет того пикселя, на котором в данный момент оказывается курсор мышки. Координаты мышки берутся отсюда:
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)
Офлайн
Сделал:
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)
Офлайн