pyside6圆角窗口与鼠标拖动

pyside6圆角窗口与鼠标拖动

原创

luan_225博主文章分类:PySide ©著作权

文章标签 pyside6 圆角窗口 鼠标拖动 文章分类 Python 后端开发

©著作权归作者所有:来自51CTO博客作者luan_225的原创作品,请联系作者获取转载授权,否则将追究法律责任

最终效果

pyside6圆角窗口与鼠标拖动

圆角窗口

要实现圆角窗口,您需要做以下两件事

[En]

To achieve a fillet window, you need to do the following two things

  • 设置窗口样式
透明背景self.setAttribute(Qt.WA_TranslucentBackground)# 无边框self.setWindowFlag(Qt.WindowType.FramelessWindowHint)# 通过 qss 设置背景和圆角self.setStyleSheet("Window{background-color:gray;border-radius:5px;}")
  • 重载​ ​paintEvent​​​
opt = QStyleOption()opt.initFrom(self)p = QPainter(self)self.style().drawPrimitive(QStyle.PE_Widget, opt, p, self)super().paintEvent(event)

重载的目的是为了让窗口使用设置的QSS去绘制背景。

实现鼠标拖动

def mousePressEvent(self, event: PySide6.QtGui.QMouseEvent) -> None:    if event.button() == Qt.LeftButton:        self.mouse_start_pt = event.globalPosition().toPoint()        self.window_pos = self.frameGeometry().topLeft()        self.drag = Truedef mouseMoveEvent(self, event: PySide6.QtGui.QMouseEvent) -> None:    if self.drag:        distance = event.globalPosition().toPoint() - self.mouse_start_pt        self.move(self.window_pos + distance)def mouseReleaseEvent(self, event: PySide6.QtGui.QMouseEvent) -> None:    if event.button() == Qt.LeftButton:        self.drag = False

完整的代码

import PySide6from PySide6.QtGui import QIntValidator, Qt, QPainterfrom PySide6.QtWidgets import QApplication, QWidget, \    QVBoxLayout, QHBoxLayout, QLabel, QButtonGroup, \    QPushButton, QCheckBox, QLineEdit, QStyleOption, QStyleclass CheckBoxGroup(QButtonGroup):    def checkedId(self) -> list[int]:        lst = []        for btn in self.buttons():            if btn.isChecked():                lst.append(self.id(btn))        return lstclass Window(QWidget):    def __init__(self):        super().__init__()        self.drag = None        self.window_pos = None        self.mouse_start_pt = None        self.__set_up_ui()    def paintEvent(self, event: PySide6.QtGui.QPaintEvent) -> None:        opt = QStyleOption()        opt.initFrom(self)        p = QPainter(self)        self.style().drawPrimitive(QStyle.PE_Widget, opt, p, self)        super().paintEvent(event)    def __set_up_ui(self):        self.setAttribute(Qt.WA_TranslucentBackground)        self.setWindowFlag(Qt.WindowType.FramelessWindowHint)        self.setStyleSheet("Window {background-color:gray;border-radius:5px;}")        v_box = QVBoxLayout(self)        v_box.addWidget(QLabel("你的职业是:"))        h_box = QHBoxLayout()        v_box.addLayout(h_box)        lst = [            QCheckBox("程序员"),            QCheckBox("程序媛"),            QCheckBox("程序猿"),            ]        qbg = CheckBoxGroup(self)        qbg.setExclusive(False)        self.qgb = qbg        _id = 1        for qrb in lst:            h_box.addWidget(qrb)            qbg.addButton(qrb, _id)            _id += 1                btn = QPushButton("获取职业")        btn.clicked.connect(lambda: print(self.qgb.checkedId()))        v_box.addWidget(btn)        le = QLineEdit()        le.setValidator(QIntValidator())    def mousePressEvent(self, event: PySide6.QtGui.QMouseEvent) -> None:        if event.button() == Qt.LeftButton:            self.mouse_start_pt = event.globalPosition().toPoint()            self.window_pos = self.frameGeometry().topLeft()            self.drag = True    def mouseMoveEvent(self, event: PySide6.QtGui.QMouseEvent) -> None:        if self.drag:            distance = event.globalPosition().toPoint() - self.mouse_start_pt            self.move(self.window_pos + distance)    def mouseReleaseEvent(self, event: PySide6.QtGui.QMouseEvent) -> None:        if event.button() == Qt.LeftButton:            self.drag = Falseapp = QApplication([])w = Window()w.show()app.exec()
  • 收藏
  • 评论
  • *举报

上一篇:QButtonGroup管理状态按钮

下一篇:Qt Quick入门 — 安装Qt6

Original: https://blog.51cto.com/u_12072082/5574694
Author: luan_225
Title: pyside6圆角窗口与鼠标拖动

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/500795/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MATLAB处理DSP使用窗函数法设计FIR数字滤波器

    1.实验目的 (1) 熟悉矩形窗、汉宁窗、海明窗等常用窗函数。 (2) 掌握用上述窗函数法设计FIR数字滤波器的原理和方法。 (3) 熟悉线性相位FIR数字滤波器特性。 (4) 了…

    Python 2023年10月1日
    048
  • 猜我能否用Python编程抢到茅台?已经全部开源到GitHub了

    Original: https://www.cnblogs.com/pythonQqun200160592/p/15476809.htmlAuthor: python可乐编程Tit…

    Python 2023年5月25日
    070
  • slf4j、log4j2及logback使用

    🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡 进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯…

    Python 2023年8月11日
    050
  • 第一次接触到匿名函数

    我是小鱼,今天是2021年9月6日,记录第一次遇到匿名函数 环境:Pycharm 3.9.6, PyCharm 2021.2 community 项目:书《Python编程 &#8…

    Python 2023年9月25日
    035
  • 数据分析练习题

    import numpy as np a=np.random.randint(1,11,10);a[a%2==1] a = np.random.randint(1,11,10) a…

    Python 2023年8月29日
    034
  • PYTHON+YOLOV5+OPENCV,实现数字仪表自动读数,并将读数结果进行输出显示和保存

    最近完成了一个项目,利用python+yolov5实现数字仪表的自动读数,并将读数结果进行输出和保存,现在完成的7788了,写个文档记录一下, 若需要数据集和源代码可以私信。 最后…

    Python 2023年8月3日
    077
  • Linux网络操作系统常用命令详解–Top命令

    Linux系统中Top命令可以让用户实时动态的观察了解系统的总体运行情况。该命令除了能够显示系统的总体运行情况外,还能显示被Linux内核管理的任务列表。Top命令显示的系统总体运…

    Python 2023年6月6日
    067
  • Pytest/Allure环境搭建

    一 Pytest环境搭建Pytest 是 python 的第三方单元测试框架,比自带 unittest 更简洁和高效, 支持315种以上的插件,同时兼容 unittest 框架, …

    Python 2023年9月14日
    044
  • 设计模式学习(十一):组合模式

    设计模式学习(十一):组合模式 作者:Grey 原文地址: 博客园:设计模式学习(十一):组合模式 CSDN:设计模式学习(十一):组合模式 组合模式 组合模式是一种 结构型模式。…

    Python 2023年10月15日
    036
  • 【django入门】 06 ORM对数据增删改查

    【django入门】 06 ORM对数据增删改查 在views.py中 新增 def index(request): UserInfo.objects.create(name=&q…

    Python 2023年6月15日
    065
  • Pytest前后置处理

    Pytest前后置处理 * – 1、setup/teardown,setup_class/teardown_class – + * 1.1、setup/te…

    Python 2023年9月13日
    050
  • python随机数(random)

    import random import string random.randint(a,b) 在python中的random.randint(a,b)用于生成一个指定范围内的整数…

    Python 2023年8月1日
    040
  • Java之AQS

    AQS是什么 是用来实现锁或者其它同步器组件的公共基础部分的抽象实现,整体就是一个抽象的FIFO队列来完成资源获取线程的安排工作,并通过一个int类变量表示持有锁的状态。 ; 使用…

    Python 2023年9月17日
    054
  • 重学c#系列——linq(2) [二十八]

    前言 前文提及到了一些基础的linq的基础,那么这一节是一些补充。 正文 关于一个orderby的问题。 比如我们输入两个order by。 这里告诉我们多个order by是没有…

    Python 2023年10月12日
    039
  • 集合(set)

    4.6 集合(set) 集合是由非重复元素组成的无序容器。集合中的元素不能重复,即使将相同的元素添加到集合中,也只保留一个元素。由于集合的这一性质,通常可以使用该集合来删除重复项。…

    Python 2023年5月23日
    076
  • Series和DataFrame的属性和方法

    目录 Series常用属性和方法 DataFrame数据的选择、遍历、修改 * 常用属性与方法 获取行列数据 遍历 Series常用属性和方法 表格数据中的每一列或者每一行的数据结…

    Python 2023年8月20日
    047
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球