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())