[Fundamentos prácticos de Python] Componente de botón de arrastrar y soltar de PyQt6 en Python

Tabla de contenido

1. La escena de combate real

2. Principales puntos de conocimiento

archivo de lectura y escritura

Gramática básica

PyQt6

sistema

Tres, combate de novatos


1. La escena de combate real

Escenario práctico: componente de botón de arrastrar y soltar de PyQt6 en Python

2. Principales puntos de conocimiento

  • archivo de lectura y escritura

  • Gramática básica

  • PyQt6

  • sistema

Tres, combate de novatos

¡Crea un archivo!

import sys

from PyQt6.QtCore import Qt, QMimeData
from PyQt6.QtGui import QDrag
from PyQt6.QtWidgets import QPushButton, QWidget, QApplication


class Button(QPushButton):

    def __init__(self, title, parent):
        super().__init__(title, parent)


    def mouseMoveEvent(self, e):

        if e.buttons() != Qt.MouseButtons.RightButton:
            return

        mimeData = QMimeData()

        drag = QDrag(self)
        drag.setMimeData(mimeData)

        drag.setHotSpot(e.position().toPoint() - self.rect().topLeft())

        dropAction = drag.exec(Qt.DropActions.MoveAction)


    def mousePressEvent(self, e):

        super().mousePressEvent(e)

        if e.button() == Qt.MouseButtons.LeftButton:
            print('press')


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        self.setAcceptDrops(True)

        self.button = Button('Button', self)
        self.button.move(100, 65)

        self.setWindowTitle('Click or Move')
        self.setGeometry(300, 300, 550, 450)


    def dragEnterEvent(self, e):

        e.accept()


    def dropEvent(self, e):

        position = e.position()
        self.button.move(position.toPoint())

        e.setDropAction(Qt.DropActions.MoveAction)
        e.accept()


def main():

    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    app.exec()


if __name__ == '__main__':
    main()

En este ejemplo, hay uno en la ventana.  QPushButtonAl hacer clic en él con el botón izquierdo del mouse, se imprimirá un mensaje de "presione" en la consola, y puede hacer clic y arrastrarlo con el botón derecho del mouse.

class Button(QPushButton):

    def __init__(self, title, parent):
        super().__init__(title, parent)

QPushButton Creó una  clase basada  Button e implementó dos  QPushButton métodos: mouseMoveEvent y  mousePressEvent. mouseMoveEvent El método es donde comienza el manejo de la operación de arrastrar y soltar.

if e.buttons() != Qt.MouseButtons.RightButton:
    return

Defina el botón derecho del mouse como el botón que activa la operación de arrastre, y el botón izquierdo del mouse solo activará el evento de clic.

drag = QDrag(self)
drag.setMimeData(mimeData)

drag.setHotSpot(e.position().toPoint() - self.rect().topLeft())

Cree  QDrag objetos para proporcionar operaciones de arrastrar y soltar basadas en tipos de datos MIME.

dropAction = drag.exec(Qt.DropActions.MoveAction)

drag Los métodos del objeto  exec realizan la operación de arrastrar y soltar.

def mousePressEvent(self, e):

    super().mousePressEvent(e)

    if e.button() == Qt.MouseButtons.LeftButton:
        print('press')

Si se hace clic en el botón con el botón izquierdo del mouse, el mensaje 'presionar' se imprimirá en la consola. Tenga en cuenta que el  mousePressEvent método también se llama en el padre aquí, de lo contrario, la acción de presionar el botón no se mostrará.

position = e.pos() self.button.move(position) 

dropEvent El método maneja la operación después de que el mouse suelta el botón: modifica la posición del componente a las coordenadas actuales del mouse.

e.setDropAction(Qt.MoveAction) e.accept() 

Use el  setDropAction tipo especificado de operación de arrastrar y soltar: movimiento del mouse.

Combate de novatos, ¡sigue aprendiendo!  

Supongo que te gusta

Origin blog.csdn.net/qq_39816613/article/details/127124618
Recomendado
Clasificación