☰
CustomTkinter:基于 Tkinter 的现代化界面库,零配置做出深色主题桌面应用
2026/11/3 2:20:39 网站建设 项目流程

CustomTkinter:基于 Tkinter 的现代化界面库,零配置做出深色主题桌面应用

【免费下载链接】CustomTkinterA modern and customizable python UI-library based on Tkinter项目地址: https://gitcode.com/gh_mirrors/cu/CustomTkinter

CustomTkinter 是一个基于 Tkinter 的现代化 Python 界面库,它把原生 Tkinter 默认的过时外观升级为带圆角、阴影、深色模式的现代控件,且不需要任何额外渲染依赖。你写的还是熟悉的 Tkinter 代码,但跑出来的界面是 2026 年的样子。它适合需要做内部工具、数据面板、小管理端,又不想引入重型跨平台框架的开发者。

🧭 选型判断:CustomTkinter 适合你的项目吗

  • 项目是小型到中型桌面工具,界面以按钮、表单、标签页、列表为主——它内置的控件库基本够用,选它没错。
  • 需要跨平台且在意观感一致——macOS、Windows、Linux 三端默认视觉高度统一,还自带缩放跟踪,高分屏不用手动处理。
  • 你需要嵌入网页、自绘大量图形或复杂 3D 效果——Tkinter 体系不适合,换别的方案。

🖼️ 两个省事的机制:双主题图片与跨平台字体

图片跟着明暗主题自动切换

传统做法要自己写"当前是深色就换一张图"的逻辑,CustomTkinter 省掉了这一步。CTkImage同时接收明、暗两张图,运行时主题一变,标签和按钮上的图片自动切换。

from PIL import Image import customtkinter dark = Image.open("test_images/home_dark.png") light = Image.open("test_images/home_light.png") home_image = customtkinter.CTkImage( light_image=light, dark_image=dark, size=(20, 20) ) nav_button = customtkinter.CTkButton( master, text="首页", image=home_image, anchor="w", fg_color="transparent", hover_color=("gray70", "gray30") )

上面代码里,light_image和dark_image分别对应两种外观模式下的图标;之后无论主题如何切换,你都不用碰nav_button。

一份字体配置,三端表现一致

Tkinter 在不同系统上会用各自的原生字体,同样的size出来的粗细和宽度都可能不一样。CustomTkinter 内置了字体管理器,并随包附带 Roboto 字体文件(见customtkinter/assets/fonts/),你只需要指定 family、size、weight 三项,其余交给它。

title_font = customtkinter.CTkFont(size=20, weight="bold") logo = customtkinter.CTkLabel( master, text="CustomTkinter", font=title_font )

这样标题在 macOS 和 Windows 上的观感几乎一致,不用为每个平台单独调字号。

🧩 完整小案例:15 行代码搭一个侧边导航

下面的ModernApp类搭了一个带侧边栏的页面:左侧三个带图标的导航按钮,右侧留出内容区,底部还有一个明暗模式切换按钮。

import customtkinter from PIL import Image class ModernApp(customtkinter.CTk): def __init__(self): super().__init__() self.title("ModernApp") self.geometry("800x500") sidebar = customtkinter.CTkFrame(self, width=180) sidebar.pack(side="left", fill="y") icon = customtkinter.CTkImage( light_image=Image.open("test_images/home_light.png"), dark_image=Image.open("test_images/home_dark.png"), size=(20, 20) ) def switch(): m = "Dark" if customtkinter.get_appearance_mode() == "Light" else "Light" customtkinter.set_appearance_mode(m) for i, label in enumerate(["仪表盘", "用户", "设置"]): b = customtkinter.CTkButton( sidebar, text=label, image=icon, anchor="w", font=customtkinter.CTkFont(size=14)) b.pack(fill="x", padx=12, pady=6, padx=10 if i else 12) customtkinter.CTkButton( sidebar, text="切换外观", command=switch).pack(pady=8) customtkinter.CTkFrame(self).pack(side="left", fill="both", expand=True) app = ModernApp() app.mainloop()

CTkFrame只设了width且按高度方向填充,就形成了一个固定宽度的侧边栏;switch函数让界面里的所有控件随主题一起换色。运行效果如下:

🎨 外观控制配置方法:改一处,全局生效

CustomTkinter 的主题本质是一份 JSON 文件,每个控件类别占一个键,里面是它的颜色、圆角、边框等属性。以 blue.json 为例,CTkButton一节里fg_color就是按钮底色,hover_color是鼠标悬停时的颜色。

{ "CTkButton": { "corner_radius": 6, "fg_color": ["#3B8ED0", "#1F6AA5"], "hover_color": ["#36719F", "#144870"] } }

注意到颜色值都是[明色, 暗色]的两元组——第一份用于浅色模式,第二份用于深色模式,这就是"改一处、全局生效"的关键:

配置位置影响范围
主题 JSON 中某个控件的键该类控件的所有实例
set_appearance_mode()整个应用当前明暗模式
set_default_color_theme()所有控件的颜色取值
customtkinter.set_appearance_mode("Dark") customtkinter.set_default_color_theme("blue")

第一行决定当前是浅色还是深色(也可传"System"跟随系统),第二行决定颜色取自哪套主题文件。两行都作用全局,之后创建的所有控件自动继承,不需要逐个设置。

🚀 安装与最小模板:pip 一条命令跑起来

先装依赖,再写一个最小窗口验证环境:

pip install customtkinter
import customtkinter app = customtkinter.CTk() app.title("我的应用") app.geometry("400x300") button = customtkinter.CTkButton(app, text="开始使用") button.pack(pady=20) app.mainloop()

第一条命令装好库之后,第二段代码就能打开一个带现代按钮的窗口,跑通即代表环境就绪。想进一步看控件长什么样,克隆仓库后直接运行 examples 目录下的示例即可。

git clone https://gitcode.com/gh_mirrors/cu/CustomTkinter

【免费下载链接】CustomTkinterA modern and customizable python UI-library based on Tkinter项目地址: https://gitcode.com/gh_mirrors/cu/CustomTkinter

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询