吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 391|回复: 9
收起左侧

[求助] pyqt5 设置窗口透明后,如何让鼠标不要穿透进入下层?

[复制链接]
一个学渣 发表于 2025-3-19 10:53
本帖最后由 一个学渣 于 2025-3-29 13:43 编辑

        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground)

这两行设置后,窗口完全透明,像在屏幕上罩了块透明玻璃。
我希望鼠标不要穿透透明窗口,透明窗口能响应鼠标事件

AI给的方法均不能使用。这是不是win10的问题,透明窗口会被忽视?有什么办法改呢?


未解决

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

水木杉 发表于 2025-3-19 11:01
总有不透明的控件吧,让它响应鼠标消息就行了,透明的好像很难响应消息了,我以前也想过这个问题,没解决成功
MarioCrane 发表于 2025-3-19 11:52
这样设置只是窗口透明,子控件是不透明的可以相应鼠标事件啊
xiaosuobjsd 发表于 2025-3-19 11:54
你的代码是隐藏当前子窗口,并不是单纯的颜色变透明。或者你可以试试把子窗口显示为另一个子窗口的办法?我不知道,我没试过,但你的代码直接就是原理错误
ManBo 发表于 2025-3-19 14:15
本帖最后由 ManBo 于 2025-3-19 14:18 编辑

https://www.52pojie.cn/thread-1778054-1-1.html
你可以参考之前别人遇到的同样情况,这里有涉及透明边框窗口的点击等,应该是要重写鼠标点击事件才行。你全透明的话我感觉要先捕获到点击事件,然后判断是否命中透明窗口的范围。你可以往这个方向琢磨
52bulesky 发表于 2025-3-19 14:47
我用的这个,参考大佬写的抄的
[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
class PriceDisplay(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Price Display")
        self.setWindowFlags(QtCore.Qt.Tool | QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.FramelessWindowHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)  # 设置透明背景
 
        self.load_config()
 
        self.label = QtWidgets.QLabel(self)
        self.label.setGeometry(0, 0, 350, 155)  # 调整标签的大小
        self.label.setAlignment(QtCore.Qt.AlignLeft)  # 左侧对齐
        self.label.setStyleSheet("background: transparent;")  # 标签背景透明
        self.update_label_style()
你好,再见 发表于 2025-3-19 16:31
可以参考一下这个调用Windows API取消窗口穿透

截屏2025-03-19 16.31.08.png 截屏2025-03-19 16.29.22.png
 楼主| 一个学渣 发表于 2025-3-19 20:12
这是某位大佬的方法,但好像有哪里不对
重写 QWidget 的 mousePressEvent、mouseReleaseEvent 和 mouseMoveEvent 方法可以实现拖动无边框窗口
例如
class MyWindow(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        self.setCursor(QtCore.Qt.SizeAllCursor)
        self.__press_pos = None
   
    def mousePressEvent(self, event: QtGui.QMouseEvent):
        if event.button() == QtCore.Qt.LeftButton:
            self.__press_pos = event.pos()
   
    def mouseReleaseEvent(self, event: QtGui.QMouseEvent):
        if event.button() == QtCore.Qt.LeftButton:
            self.__press_pos = None
   
    def mouseMoveEvent(self, event: QtGui.QMouseEvent):
        if self.__press_pos is not None:
            self.move(self.pos() + event.pos() - self.__press_pos)
ronalp 发表于 2025-3-20 22:59
用 pyqt6 做的界面也有类似问题,不知道是不是和 pyqt5 解决方法相同。另外就是如何适配深色模式啊?
 楼主| 一个学渣 发表于 2025-3-29 13:44
有人知道吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-3 07:13

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表