Tabla de contenido
2. Principales puntos de conocimiento
archivo de lectura y escritura
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
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. QPushButton
Al 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!