PyQt5 无边框窗口重新定义鼠标事件

Posted tylerwu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyQt5 无边框窗口重新定义鼠标事件相关的知识,希望对你有一定的参考价值。

PyQt5 无边框窗口重新定义鼠标事件

 

#! /usr/bin/env python

# -*- coding:utf-8 -*-

 

import sys

from PyQt5.QtWidgets import QApplication, QWidget

from PyQt5.QtCore import Qt 

from PyQt5.QtGui import QCursor

 

class NoBorderWindow(QWidget):

    def __init__(self):

        super().__init__()

        self.window_UI()

        self.qss()

 

    def window_UI(self):

        self.resize(600, 200) 

        self.setWindowFlags(Qt.FramelessWindowHint)

 

    def qss(self):

        self.qssfile = "./qss/noborder.qss"

        self.style = CommonStyleSheet.loadqss(self.qssfile)

        self.setStyleSheet(self.style)

 

    # 重新定义鼠标事件

    def mousePressEvent(self, QMouseEvent):

        if QMouseEvent.button() == Qt.LeftButton:

            self.drag = True

            self.dragPosition = QMouseEvent.globalPos() - self.pos()

            QMouseEvent.accept()

            self.setCursor(QCursor(Qt.PointingHandCursor))

 

    def mouseMoveEvent(self, QMouseEvent):

        if Qt.LeftButton and self.drag:

            self.move(QMouseEvent.globalPos() - self.dragPosition)

            QMouseEvent.accept()

 

    def mouseReleaseEvent(self, QMouseEvent):

        self.drag = False

        QMouseEvent.accept()

        self.setCursor(QCursor(Qt.ArrowCursor))

 

class CommonStyleSheet:

    def __init__(self):

        pass

 

    @staticmethod

    def loadqss(style):

        with open (style, "r", encoding="utf-8") as f:

            return f.read()

 

if __name__ == "__main__":

    app = QApplication(sys.argv)

    win = NoBorderWindow()

    win.show()

    sys.exit(app.exec_())

 

 

Qss文件:

 

#w{background-image:url(./images/bg.gif);}

QWidget{background-color: greenyellow;}

 

 技术图片

以上是关于PyQt5 无边框窗口重新定义鼠标事件的主要内容,如果未能解决你的问题,请参考以下文章

4.8 自定义窗口演练鼠标和窗口事件

Qt自定义界面边框后,移动鼠标拖动界面,界面会拖到任务栏以下。。。如何解决?

PyQt5-Qt Designer鼠标+键盘事件

WPF中鼠标事件MouseLeftButtonDown,MouseLeftButtonUp实现无边框窗体的最大化,还原

Tkinter:鼠标拖动一个没有边框的窗口,例如。覆盖直接(1)

PyQt5学习记录---监听鼠标拖拽事件实现Mac上百度云盘拖拽效果