- 注意事项
- 前言
- 安装库
- 使用云母特效
- 完整代码
- 效果预览
- 补充
- 完整代码
- 效果预览
- 可选项
- darkdetect简单使用
- 完整代码(标题栏改变)①
- 完整代码(整个窗口改变)②
这篇论文仅对Windows11系统有效,如果是macOs、Linux及其他系统的都无法正常使用。
前言有次我在网上搜一些资料时,无意间找到了一个网站谈论,可以在Python实现云母特效。于是我就点了进去,发现这是用win32做出来的,兴致勃勃地看了起来。我现在也会使用了。就把这期教程分享给大家学习
安装库因为这个库是使用win32进行开发的,所以要先下载pywin32才能进行使用,在终端输入以下代码安装pywin32库
pip install pywin32 -i https://pypi.tuna.tsinghua.edu.cn/simple/
之后就可以安装云母特效库了。库可以在pypi里找到,叫做win32mica。也是一样在终端输入以下代码进行安装win32mica库
pip install win32mica -i https://pypi.tuna.tsinghua.edu.cn/simple/使用云母特效
首先我们来看一下官方示例
import tkinter as tk
from ctypes import windll
try:
import win32mica as mc
except ImportError:
import os
os.system("pip install win32mica")
app=tk.Tk()
app.title("Tk Dark")
app.configure(bg="#000000")
app.wm_attributes("-transparent", "#000000")
app.update()
HWND=windll.user32.GetParent(app.winfo_id())
mc.ApplyMica(HWND, ColorMode=mc.MICAMODE.DARK)
app2=tk.Tk()
app2.title("Tk Light")
app2.configure(bg="#000000")
app2.wm_attributes("-transparent", "#000000")
app2.update()
HWND=windll.user32.GetParent(app2.winfo_id())
mc.ApplyMica(HWND, ColorMode=mc.MICAMODE.LIGHT)
app.mainloop()
其实这也并不复杂,首先导入库
import win32mica as mc import tkinter as tk from ctypes import windll
然后创建一个窗口
app = tk.Tk() # 这是个十分重要的一步,不用的话将显示不出效果 app.update() # 如果想要改为深色模式。将mc.MICAMODE.LIGHT改为mc.MICAMODE.DARK即可。 mc.ApplyMica(windll.user32.GetParent(app.winfo_id()), mc.MICAMODE.LIGHT)
最后消息循环,运行窗口
app.mainloop()完整代码
import win32mica as mc import tkinter as tk from ctypes import windll app = tk.Tk() # 这是个十分重要的一步,不用的话将显示不出效果 app.update() # 如果想要改为深色模式。将mc.MICAMODE.LIGHT改为mc.MICAMODE.DARK即可。 mc.ApplyMica(windll.user32.GetParent(app.winfo_id()), mc.MICAMODE.LIGHT) app.mainloop()效果预览
可以看到标题栏变了
我们可以看到,这个也只是标题栏变了,但窗口没有变,这是因为,如果要改变整个窗口的话会出现一些问题。所以改到补充,如果真的需要的话,那么就按下方指示操作:
要想使窗口也变透明,就选取一个符合本地的颜色。我们就在app.mainloop之前添加代码
# 可以更改这里的颜色,但是要使两个颜色一样才行
app.configure(background=""#ffffff)
app.attributes("-transparent", "#ffffff")
完整代码
import win32mica as mc
import tkinter as tk
from ctypes import windll
app = tk.Tk()
# 这是个十分重要的一步,不用的话将显示不出效果
app.update()
# 如果想要改为深色模式。将mc.MICAMODE.LIGHT改为mc.MICAMODE.DARK即可。
mc.ApplyMica(windll.user32.GetParent(app.winfo_id()), mc.MICAMODE.LIGHT)
# 可以更改这里的颜色,但是要使两个颜色一样才行
app.configure(background="#ffffff")
app.attributes("-transparent", "#ffffff")
app.mainloop()
效果预览
这是我们可以看到整个窗口都变了
我们在使用这个库时候,想将云母颜色设为本地化的,就可以使用darkdetect库,先获取本地主题颜色,再进行检测调整。
pip install darkdetect -i https://pypi.tuna.tsinghua.edu.cn/simple/darkdetect简单使用
import darkdetect print(darkdetect.isLight()) # 检测是否是浅色主题 print(darkdetect.isDark()) # 检测是否是深色主题
首先导入darkdetect库
import darkdetect
我们就可以使用这个检测是否是浅色主题,如果是浅色主题就将窗口的主题调为浅色,如果是深色主题就将窗口的主题调为深色。所以可以使用以下代码选择哪种主题
if darkdetect.isLight():
theme = mc.MICAMODE.LIGHT
elif darkdetect.isDark():
theme = mc.MICAMODE.DARK
mc.ApplyMica(windll.user32.GetParent(app.winfo_id()), theme)
完整代码(标题栏改变)①
import win32mica as mc
import tkinter as tk
import darkdetect
from ctypes import windll
app = tk.Tk()
# 这是个十分重要的一步,不用的话将显示不出效果
app.update()
# 如果想要改为深色模式。将mc.MICAMODE.LIGHT改为mc.MICAMODE.DARK即可。
if darkdetect.isLight():
theme = mc.MICAMODE.LIGHT
elif darkdetect.isDark():
theme = mc.MICAMODE.DARK
mc.ApplyMica(windll.user32.GetParent(app.winfo_id()), theme)
app.mainloop()
完整代码(整个窗口改变)②
import win32mica as mc
import tkinter as tk
import darkdetect
from ctypes import windll
app = tk.Tk()
# 这是个十分重要的一步,不用的话将显示不出效果
app.update()
# 如果想要改为深色模式。将mc.MICAMODE.LIGHT改为mc.MICAMODE.DARK即可。
if darkdetect.isLight():
theme = mc.MICAMODE.LIGHT
elif darkdetect.isDark():
theme = mc.MICAMODE.DARK
mc.ApplyMica(windll.user32.GetParent(app.winfo_id()), theme)
# 可以更改这里的颜色,但是要使两个颜色一样才行
app.configure(background="#ffffff")
app.attributes("-transparent", "#ffffff")
app.mainloop()



