【tkinter扩展库】tkdev4

发布于:2023-01-04 ⋅ 阅读:(314) ⋅ 点赞:(0)

tkdev4

tkinter的高级扩展库,大多使用win32进行开发,所以对Windows的支持很好。原本叫做tkinterDev的,
然后就为了大版本更新,改了很多东西,放弃了那个旧版本,改为了船新的4.0版本。文档现在我都有点懒得写了,特别多的方法,一时半会弄不完,就现在CSDN里写文档了。

安装

这里的话,还是推荐使用4.2.3也就是现在我开发这个时间的版本,暂时还没有BUG
而如果我以后更新,指不定出现一些BUG(这样的事已经出现了很多了)。

pip install tkdev4

接下来,要安装依赖库,我做了一个快速安装的方法,可以一下安装所有的扩展库

from tkdev4 import Install_ALL

Install_ALL()

初始化(可选)

这个主要为了后面安装Winico扩展而准备的。如果不想使用托盘图标,就可以不看这个。

python -m tkdev4

实现浅色和深色的主题切换

注意,这个方法只有Windows11 21H2版本才可以使用,其他系统,或其他版本的均不可使用。

我开发了一个组件DevManage,用于管理组件的,专门使用Win32开发的,所以有许多的功能。
其中使用dwmapi做了一个快速切换主题的功能(原来的需要研究很久才能做好)。

DevManage(master: tk.Tk)

  • master是被管理的组件

dwm_set_window_attribute_use_dark_mode()

  • 切换成暗黑模式

dwm_set_window_attribute_use_light_mode()

  • 切换成明亮模式

经检验测试发现,想要切换,必须要设置好图标(我也不知道为什么),这里就使用我这个库里面的图标,快速开始。

这里为了更加符合黑暗模式,就将窗口改为了黑色。

from tkdev4 import DevManage, Icon_Empty
from tkinter import Tk


root = Tk()
root.iconbitmap(Icon_Empty)
root.configure(background="#000000")
manage = DevManage(root)
manage.dwm_set_window_attribute_use_light_mode()  # 切换为明亮模式(默认)
manage.dwm_set_window_attribute_use_dark_mode()  # 切换为暗黑模式
root.mainloop()

黑暗模式预览效果

这里因为我的系统是Windows11 22H2,标题栏被改成了云母特效,比22H2低的版本不会有。
但是并不影响正常使用。

这里明亮模式我就不演示,毕竟明亮模式也就是什么也没加,也就是取消了黑暗模式而已。

修改圆角样式

注意,这个方法只有Windows11 21H2版本才可以使用,其他系统,或其他版本的均不可使用。

圆角样式在Windows11很常见,也没必要修改,但是我也不知道为什么我自己要加入这个功能。

dwm_set_window_round_round()

  • 设置为正常圆角

dwm_set_window_round_round_small

  • 设置为小圆角

dwm_set_window_round_donot_round()

  • 设置为没有圆角

这个我也不知道为啥,似乎只要设置了图标才能使用

无圆角

from tkdev4 import DevManage, Icon_Empty
from tkinter import Tk


root = Tk()
root.iconbitmap(Icon_Empty)
manage = DevManage(root)
manage.dwm_set_window_round_donot_round()
root.mainloop()

无圆角效果预览

小圆角

from tkdev4 import DevManage, Icon_Empty
from tkinter import Tk


root = Tk()
root.iconbitmap(Icon_Empty)
manage = DevManage(root)
manage.dwm_set_window_round_round_small()
root.mainloop()

小圆角效果预览
虽然这个样式确实是改了,但是区别不算太大。我感觉像Basic的圆角大小。

之后,圆角我就不展示了,没什么好看的,是默认的样子。

修改窗口渲染

注意,这个方法只有Windows Vista版本及以上版本才可以使用,其他系统,或更低版本的均不可使用。

我不知道这个有没有必要,我设置的一些数值,会变成Basic界面。

dwm_set_ncrendering_policy(value=2)

  • value 为渲染政策
    • DWMNCRP_USEWINDOWSTYLE value 0非客户端渲染区域根据窗口样式进行渲染。
    • DWMNCRP_DISABLED value 1 非工作区呈现被禁用;窗口样式将被忽略。
    • DWMNCRP_ENABLED value 2 启用非工作区渲染;窗口样式将被忽略。
    • DWMNCRP_LAST value 3 最大已识别 DWMNCRENDERING 策略值,用于验证目的。

经测试,value 0value 2都会说原来的样子,value 1会变成Basic界面,value 3将会在失去焦点后变成Basic界面。

from tkdev4 import DevManage, Icon_Empty
from tkinter import Tk


root = Tk()
root.iconbitmap(Icon_Empty)
manage = DevManage(root)
manage.dwm_set_ncrendering_policy(1)
root.mainloop()

Basic界面效果预览

托盘图标

托盘图标也就是右下角的那一些图标,点击后一般会打开窗口,右键一般会打开配置。
而这篇文章需要使用初始化,也就是上面讲的那些如何初始化的地方。不过,他会自动运行初始化的,安装的。我使用了tcl/tk的扩展库Winico来运行,它可以让我更加方便进行开发托盘图标。

对了,我们还需要安装Winico但这些不要管,你只要使用了这个组件,他会自动安装的,没必要管。

我将它做成了DevTray组件,通过调用tcl/tk来使用Winico

from tkdev4 import DevTray
from tkinter import Tk


root = Tk()
tray = DevTray(root)
tray.show()
root.mainloop()

我事先为这个库定义了默认事件函数,所以可以快速使用。接下来你就会看到右下角多了一个图标,这个图标是从Winico扩展库中找到的,准确位置在Python/tcl/pkg/tkchat.ico

参数

text 托盘上的提示文本

icon 托盘图标

icon 托盘图标模式

  • none 为从自己设置图标 可以使用createfrom或者load设置,这两个都会返回图标ID。
  • icon 为从本地加载图标
  • load 为从系统默认图标中加载图标

menu_func 为事件处理,会返回一些数据
- event 为发生的事件
- icon_id 图标ID
- icon 返回自己
- x 发生事件的X坐标
- y 发生事件的Y坐标

删除图标

如果不想要这个图标,可以使用delete设置,需要设置图标ID,图标ID可以通过icon获得。

from tkdev4 import DevTray
from tkinter import Tk


root = Tk()
tray = DevTray(root)
tray.delete(tray.icon)
root.mainloop()

这样就成功删除了一个图标。

本文含有隐藏内容,请 开通VIP 后查看