es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para lograr esta funcionalidad, puedes crear un widget personalizado e implementar los siguientes pasos:
    – Anular el método mouseMoveEvent() del widget para obtener la posición actual del mouse y actualizar las coordenadas del rectángulo en consecuencia.
    – Anular el método paintEvent() del widget para dibujar el rectángulo.
    – Al comienzo de mouseMoveEvent(), llamar a self.update() para provocar una repintura del widget.

    Aquí tienes un código de ejemplo para que puedas empezar:

    from PyQt5.QtWidgets import QWidget
    from PyQt5.QtGui import QPainter, QPen
    from PyQt5.QtCore import Qt, QPoint, QSize
    
    class MyRectWidget(QWidget):
        def __init__(self):
            super().__init__()
            self.rect_center = QPoint(0, 0)
    
        def mouseMoveEvent(self, event):
            self.rect_center = event.pos()
            self.update()
    
        def paintEvent(self, event):
            painter = QPainter(self)
            painter.setRenderHint(QPainter.Antialiasing)
            pen = QPen(Qt.gray, 2, Qt.DashLine)
            painter.setPen(pen)
    
            rect_size = QSize(100, 100)
            rect_pos = QPoint(self.rect_center.x() - rect_size.width() / 2, 
                              self.rect_center.y() - rect_size.height() / 2)
            rect = QRect(rect_pos, rect_size)
            painter.drawRect(rect)
    

    Para utilizar este widget en tu aplicación principal, simplemente crea una instancia de este y agrégala a tu diseño:

    from PyQt5.QtWidgets import QApplication, QVBoxLayout, QHBoxLayout, QPushButton, QMainWindow
    
    class MyMainWindow(QMainWindow):
        def __init__(self):
            super().__init__()
    
            # Crea el widget personalizado y agrégalo a un diseño
            self.rect_widget = MyRectWidget()
            layout = QVBoxLayout()
            layout.addWidget(self.rect_widget)
    
            # Agrega un botón al diseño para ilustrar que se pueden agregar otros widgets también
            button = QPushButton('Haz click')
            layout.addWidget(button)
    
            # Establece el diseño de la ventana principal
            central_widget = QWidget()
            central_widget.setLayout(layout)
            self.setCentralWidget(central_widget)
    
    if __name__ == '__main__':
        app = QApplication([])
        main_window = MyMainWindow()
        main_window.show()
        app.exec_()
    

    Este código creará una ventana con un widget personalizado que dibujará un rectángulo centrado en el cursor del mouse, a medida que el usuario mueve el mouse. También se agrega un botón a la ventana solo para ilustrar que otros widgets pueden coexistir en el mismo diseño.

Comments are closed.