如何在 tinter 中创建半透明 window?
How to create a translucent window in tinter?
我正在尝试在 Tkinter 中创建一个半透明的 window,就像 windows 11
中的那样
如何做到这一点?如果我们不能做到这一点,我们可以捕获屏幕的一部分并使用 cv2 对其进行模糊处理并将其用作持续更新的背景吗?
不,tkinter
不能直接做到这一点。但是:
如果你使用PIL
,你可以获得window的位置,然后截屏,然后对其进行模糊处理,然后将其设为你的应用程序背景。但如果用户尝试 move/resize 应用程序,这将不起作用。但这是一个粗略的代码:
from tkinter import *
from PIL import ImageTk, ImageGrab, ImageFilter # pip install Pillow
root = Tk()
root.overrideredirect(1) # Hide the titlebar etc..
bg = Canvas(root)
bg.pack(fill='both',expand=1)
root.update()
# Get required size and then add pixels to remove title bar and window shadow
left = root.winfo_rootx()
top = root.winfo_rooty()
right = left + root.winfo_width()
bottom = top + root.winfo_height()
root.withdraw() # Hide the window
img = ImageGrab.grab((left,top,right,bottom)) # Get the bg image
root.deiconify() # Show the window
img = img.filter(ImageFilter.GaussianBlur(radius=5)) # Blur it
img = ImageTk.PhotoImage(img)
bg.create_image(0,0, image=img, anchor='nw') # Show in canvas
label = Label(root,text='This is a translucent looking app')
bg.create_window(bg.winfo_width()/2,bg.winfo_height()/2,window=label) # Position in the center
root.mainloop()
输出 tkinter
:
tkinter
不是最佳选择,如果您想要现代外观,请使用 PyQt
并选中 qtacrylic
输出 PyQt
:
对于实时模糊(原生 Windows 模糊)使用 "BlurWindow":
python -m pip install BlurWindow
from tkinter import *
from ctypes import windll
from BlurWindow.blurWindow import blur
root = Tk()
root.config(bg='green')
root.wm_attributes("-transparent", 'green')
root.geometry('500x400')
root.update()
hWnd = windll.user32.GetForegroundWindow()
blur(hWnd)
def color(hex):
hWnd = windll.user32.GetForegroundWindow()
blur(hWnd,hexColor=hex)
e = Entry(width=9)
e.insert(0,'#12121240')
e.pack()
b = Button(text='Apply',command=lambda:[color(e.get())])
b.pack()
root.mainloop()
我正在尝试在 Tkinter 中创建一个半透明的 window,就像 windows 11
如何做到这一点?如果我们不能做到这一点,我们可以捕获屏幕的一部分并使用 cv2 对其进行模糊处理并将其用作持续更新的背景吗?
不,tkinter
不能直接做到这一点。但是:
如果你使用PIL
,你可以获得window的位置,然后截屏,然后对其进行模糊处理,然后将其设为你的应用程序背景。但如果用户尝试 move/resize 应用程序,这将不起作用。但这是一个粗略的代码:
from tkinter import *
from PIL import ImageTk, ImageGrab, ImageFilter # pip install Pillow
root = Tk()
root.overrideredirect(1) # Hide the titlebar etc..
bg = Canvas(root)
bg.pack(fill='both',expand=1)
root.update()
# Get required size and then add pixels to remove title bar and window shadow
left = root.winfo_rootx()
top = root.winfo_rooty()
right = left + root.winfo_width()
bottom = top + root.winfo_height()
root.withdraw() # Hide the window
img = ImageGrab.grab((left,top,right,bottom)) # Get the bg image
root.deiconify() # Show the window
img = img.filter(ImageFilter.GaussianBlur(radius=5)) # Blur it
img = ImageTk.PhotoImage(img)
bg.create_image(0,0, image=img, anchor='nw') # Show in canvas
label = Label(root,text='This is a translucent looking app')
bg.create_window(bg.winfo_width()/2,bg.winfo_height()/2,window=label) # Position in the center
root.mainloop()
输出 tkinter
:
tkinter
不是最佳选择,如果您想要现代外观,请使用 PyQt
并选中 qtacrylic
输出 PyQt
:
对于实时模糊(原生 Windows 模糊)使用 "BlurWindow":
python -m pip install BlurWindow
from tkinter import *
from ctypes import windll
from BlurWindow.blurWindow import blur
root = Tk()
root.config(bg='green')
root.wm_attributes("-transparent", 'green')
root.geometry('500x400')
root.update()
hWnd = windll.user32.GetForegroundWindow()
blur(hWnd)
def color(hex):
hWnd = windll.user32.GetForegroundWindow()
blur(hWnd,hexColor=hex)
e = Entry(width=9)
e.insert(0,'#12121240')
e.pack()
b = Button(text='Apply',command=lambda:[color(e.get())])
b.pack()
root.mainloop()