48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
import sys
|
|
import os
|
|
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget
|
|
from PyQt6.QtCore import Qt, QPoint
|
|
|
|
# À placer tout en haut, avant les imports PyQt6 si possible
|
|
os.environ["QT_QPA_PLATFORM"] = "xcb"
|
|
|
|
class FenetreSansTitre(QMainWindow):
|
|
def __init__(self):
|
|
super().__init__()
|
|
|
|
self.setWindowFlags(Qt.WindowType.FramelessWindowHint)
|
|
self.resize(400, 300)
|
|
|
|
# IMPORTANT : On active le suivi de souris
|
|
self.setMouseTracking(True)
|
|
|
|
layout = QVBoxLayout()
|
|
btn_quitter = QPushButton("Quitter")
|
|
btn_quitter.clicked.connect(self.close)
|
|
layout.addWidget(btn_quitter)
|
|
|
|
container = QWidget()
|
|
container.setLayout(layout)
|
|
self.setCentralWidget(container)
|
|
|
|
self._drag_pos = None
|
|
|
|
def mousePressEvent(self, event):
|
|
if event.button() == Qt.MouseButton.LeftButton:
|
|
# On enregistre la position du clic RELATIVE au coin haut-gauche de la fenêtre
|
|
self._drag_pos = event.position().toPoint()
|
|
|
|
def mouseMoveEvent(self, event):
|
|
if self._drag_pos is not None:
|
|
# On déplace la fenêtre vers la position globale du curseur
|
|
# MOINS le décalage initial (offset) pour éviter que le curseur ne saute au centre
|
|
self.move(event.globalPosition().toPoint() - self._drag_pos)
|
|
|
|
def mouseReleaseEvent(self, event):
|
|
self._drag_pos = None
|
|
|
|
if __name__ == "__main__":
|
|
app = QApplication(sys.argv)
|
|
fenetre = FenetreSansTitre()
|
|
fenetre.show()
|
|
sys.exit(app.exec()) |