Created
July 18, 2022 11:14
-
-
Save paulwinex/3431a71597a8c18a6c39a6e8ed1756f9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from PySide6.QtWidgets import * | |
from PySide6.QtCore import * | |
from PySide6.QtGui import * | |
class CourseWidget(QWidget): | |
def __init__(self): | |
super().__init__() | |
self.setWindowFlags(Qt.FramelessWindowHint | Qt.Tool) | |
ly = QVBoxLayout(self) | |
ly.setContentsMargins(0, 0, 0, 0) | |
toolbar = QWidget() | |
toolbar_ly = QHBoxLayout(toolbar) | |
toolbar_ly.setContentsMargins(0, 0, 0, 0) | |
toolbar_ly.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)) | |
toolbar_ly.addWidget(QPushButton('⨉', maximumWidth=20, maximumHeight=20, clicked=self.close, flat=True)) | |
ly.addWidget(toolbar) | |
ly.addItem(QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)) | |
ly.addWidget(QLabel('Left Mouse: MOVE Middle Mouse: Resize')) | |
self.isMove = False | |
self.isResize = False | |
self.currPos = self.startPos = 0 | |
self.curSize = self.size() | |
self.resize(400, 300) | |
def closeEvent(self, event: QCloseEvent) -> None: | |
if QMessageBox.question(self, 'Close Widget', 'Exit?', QMessageBox.Yes|QMessageBox.Cancel) == QMessageBox.Yes: | |
qApp.quit() | |
else: | |
event.ignore() | |
def mouse_moved(self, event): | |
if self.isMove: | |
new = event.globalPosition() | |
new_pos = new + self.currPos - self.startPos | |
self.move(new_pos.x(), new_pos.y()) | |
elif self.isResize: | |
new_pos = event.globalPosition() - self.startPos | |
new_size = self.curSize + QSize(new_pos.x(), new_pos.y()) | |
self.resize(new_size.width(), new_size.height()) | |
def mousePressEvent(self, event): | |
if event.button() == Qt.LeftButton: | |
self.isMove = True | |
self.startPos = event.globalPosition() | |
self.currPos = self.pos() | |
elif event.button() == Qt.MiddleButton: | |
self.isResize = True | |
self.curSize = self.size() | |
self.startPos = event.globalPosition() | |
else: | |
self.isMove = False | |
self.isResize = False | |
QWidget.mousePressEvent(self, event) | |
def mouseMoveEvent(self, event): | |
self.mouse_moved(event) | |
def mouseReleaseEvent(self, event): | |
if event.button() == Qt.MiddleButton: | |
self.isResize = False | |
if event.button() == Qt.LeftButton: | |
self.isMove = False | |
QWidget.mouseReleaseEvent(self, event) | |
if __name__ == '__main__': | |
qApp = QApplication() | |
qApp.setQuitOnLastWindowClosed(True) | |
window = CourseWidget() | |
window.show() | |
qApp.exec() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment