带有pyqt的模糊透明窗口

时间:2019-02-21 13:01:33

标签: python qt pyqt transparency blur

我正在尝试创建一个半透明且后面模糊的pyqt窗口。 我已经尝试过使用setWindowOpacity将其设置为半透明,但是我无法添加模糊效果。 我的代码是:

import sys
from PyQt5 import QtCore, QtWidgets, QtGui


class main(QtWidgets.QDialog):
    def __init__(self):
        super(main, self).__init__()
        self.setMinimumSize(800,500)


        self.setWindowFlags(
            self.windowFlags() | QtCore.Qt.FramelessWindowHint
        )

        # self.setAttribute(QtCore.Qt.WA_TranslucentBackground,on=True)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mw = main()
    mw.setWindowOpacity(.60)
    mw.show()
    sys.exit(app.exec())

这给出了输出。

my output

但是我想要这样的东西: my imagination

2 个答案:

答案 0 :(得分:1)

在pyqt5中这是完全不可能的,但我并不是说不可能。您只需要执行以下操作-

注意:仅当您在无边框的全屏窗口中使用您的应用程序时,此方法才有效。

让我们看看如何。我要使用KIVY,所以请下载它。

如果您有奇异果,请跳过此部分,以获取奇异果安装指南。

请记住,仅Python 2.7、3.7和3.4支持Kivy,因此,如果任何版本不匹配,请卸载拥有的Python。要找到您当前的Python版本,请在cmd中输入“ python version”。

  1. 在cmd中输入“ pip install kivy”

  2. 在安装过程中可能会出现问题,因此我说要卸载不受支持的Python版本。

  3. 以下软件包是必需的,如果没有任何软件包,请下载它们。

    • PIL#安装pip安装PIL
    • pyautogui#安装pip安装pyautogui
  4. 说明:让我们看看它是如何工作的,在Python中使用起来有点困难

DWM(桌面窗口管理器)API,可帮助模糊后面的窗口。但是在C ++中,有一个内置的名为EnableBlurBehind()的函数可以使用DWM api来模糊后面的窗口。

在我们的示例中,首先,我们将使用pyautogui软件包截屏。第二,模糊图像(屏幕快照或背景)。第三,在画布上设置图像。瞧,您的窗户后面模糊了。因此,让这个概念生效。

仅当您下载了必需的库后,才复制并粘贴到IDE中

主要python文件,另存为name.py

# first take the screenshot else problem will occur
import pyautogui
# take screenshot
screenshot = pyautogui.screenshot()
screenshot.save('screenshot.png')

# import other required libraries
from PIL import Image, ImageFilter
from kivy.app import App
from kivy.core.window import Window
from kivy.uix.widget import Widget
from PIL import Image, ImageFilter
from win32api import GetSystemMetrics
from kivy.animation import Animation


# set window size
Window.borderless = True
Window.size = GetSystemMetrics(0), GetSystemMetrics(1)
Window.left = 0
Window.top = 0


class Blur(Widget):

    # Transparent Blur Window Exmple the screenshot
    get_image = Image.open('screenshot.png')
    blur_image = get_image.filter(ImageFilter.GaussianBlur(radius=15))
    blur_image.save('blured.png')

    def anim(self):
        animator = Animation(x=1800, y=500)
        animator.start(self.ids.animate)


class Build(App):
    def build(self):
        return Blur()


Build().run()

     

KV语言文件另存为build.kv,否则将无法工作

<Blur>:
    canvas.before:
        Rectangle:
            pos: self.pos
            size: self.size
            source: 'blured.png'
    Button:
        id: animate
        text: 'Here, you can add anything you want now. Click me!'
        bold: True
        italic: True
        pos: 700, 500
        font_size: 25
        size: 400, 300
        background_color: 0,0,0,0
        on_press: root.anim()

如果您不知道如何在IDE中打开file.kv,请在Google上搜索它。如果有,请解决所有非常规问题。

答案 1 :(得分:0)

blur

你可以这样做:

<块引用>

pip 安装 BlurWindow

示例代码:

import sys
from PySide2.QtWidgets import *
from PySide2.QtCore import *

from BlurWindow.blurWindow import blur



class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.resize(500, 400)

        hWnd = self.winId()
        print(hWnd)
        blur(hWnd)

        self.setStyleSheet("background-color: rgba(0, 0, 0, 0)")



if __name__ == '__main__':
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())