首页
学习
活动
专区
圈层
工具
发布

python pyqt5 卡通人物形状窗体

-- coding: utf-8 --

""" 【简介】 不规则的,可以拖动的窗体实现例子

"""

import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QPixmap, QPainter, QCursor, QBitmap from PyQt5.QtCore import Qt

class ShapeWidget(QWidget): def init(self, parent=None): super(ShapeWidget, self).init(parent) self.setWindowTitle("不规则的,可以拖动的窗体实现例子") self.mypix()

代码语言:javascript
复制
# 显示不规则 pic
def mypix(self):
    self.pix = QBitmap("./images/mask.png")
    self.resize(self.pix.size())
    self.setMask(self.pix)
    print(self.pix.size())
    self.dragPosition = None

# 重定义鼠标按下响应函数mousePressEvent(QMouseEvent)和鼠标移动响应函数mouseMoveEvent(QMouseEvent),使不规则窗体能响应鼠标事件,随意拖动。
def mousePressEvent(self, event):
    if event.button() == Qt.LeftButton:
        self.m_drag = True
        self.m_DragPosition = event.globalPos() - self.pos()
        event.accept()
        self.setCursor(QCursor(Qt.OpenHandCursor))
    if event.button() == Qt.RightButton:
        self.close()

def mouseMoveEvent(self, QMouseEvent):
    if Qt.LeftButton and self.m_drag:
        # 当左键移动窗体修改偏移值
        self.move(QMouseEvent.globalPos() - self.m_DragPosition)
        QMouseEvent.accept()

def mouseReleaseEvent(self, QMouseEvent):
    self.m_drag = False
    self.setCursor(QCursor(Qt.ArrowCursor))

# 一般 paintEvent 在窗体首次绘制加载, 要重新加载paintEvent 需要重新加载窗口使用 self.update() or  self.repaint()
def paintEvent(self, event):
    painter = QPainter(self)
    painter.drawPixmap(0, 0, self.width(), self.height(), QPixmap("./images/boy.png"))

if name == 'main': app = QApplication(sys.argv) form = ShapeWidget() form.show() app.exec_()

下一篇
举报
领券