Skip to content

Instantly share code, notes, and snippets.

@paulwinex
Created July 18, 2022 11:14
Show Gist options
  • Save paulwinex/3431a71597a8c18a6c39a6e8ed1756f9 to your computer and use it in GitHub Desktop.
Save paulwinex/3431a71597a8c18a6c39a6e8ed1756f9 to your computer and use it in GitHub Desktop.
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