如何修改Tkinter菜单栏颜色使其与窗口背景色一致
我明白你遇到的问题了——Tkinter的默认菜单栏确实有点“顽固”,直接加bg属性往往不生效,因为它默认调用系统原生的菜单样式,不会理会我们设置的背景色参数。下面给你几个可行的解决办法,帮你把菜单栏颜色改成和窗口背景#20232A一致:
方案1:用ttk自定义菜单栏样式(推荐,简单高效)
Tkinter的ttk组件支持更灵活的样式自定义,只要切换到支持自定义的主题(比如clam),就能修改菜单栏的背景色:
import tkinter as tk from tkinter import ttk root = tk.Tk() root.configure(bg="#20232A") # 配置ttk样式,先切换到支持自定义的主题 style = ttk.Style(root) style.theme_use("clam") # 设置菜单栏的背景色和文字颜色,文字颜色可以根据你的需求调整 style.configure("TMenubar", background="#20232A", foreground="white") # 创建ttk菜单栏并绑定到窗口 menubar = ttk.Menu(root, style="TMenubar") root.config(menu=menubar) # 添加示例菜单选项 file_menu = ttk.Menu(menubar, style="TMenubar") file_menu.add_command(label="Open", command=lambda: print("Open clicked")) file_menu.add_command(label="Save", command=lambda: print("Save clicked")) menubar.add_cascade(label="File", menu=file_menu) root.mainloop()
方案2:自定义菜单栏组件(完全可控,适配所有场景)
如果ttk的方案在某些系统(比如macOS)还是无法生效,你可以用Frame模拟菜单栏,完全脱离系统原生样式,实现100%自定义:
import tkinter as tk root = tk.Tk() root.configure(bg="#20232A") # 用Frame模拟菜单栏容器 menubar_frame = tk.Frame(root, bg="#20232A") menubar_frame.pack(fill="x") # 定义下拉菜单的触发事件 def show_file_menu(event): file_menu.post(event.x_root, event.y_root) # 创建菜单栏上的“File”按钮(用Label模拟,可点击) file_btn = tk.Label( menubar_frame, text="File", bg="#20232A", fg="white", padx=12, pady=3, cursor="hand2" ) file_btn.pack(side="left") file_btn.bind("<Button-1>", show_file_menu) # 创建下拉菜单,设置和窗口一致的背景色 file_menu = tk.Menu( root, bg="#20232A", fg="white", bd=0, activebackground="#303641" # 可以设置鼠标 hover 时的颜色 ) file_menu.add_command(label="Open", bg="#20232A", fg="white", command=lambda: print("Open clicked")) file_menu.add_command(label="Exit", bg="#20232A", fg="white", command=root.quit) root.mainloop()
方案3:修改Windows系统注册表(不推荐,影响全局)
如果你只在Windows系统上使用程序,且愿意修改全局系统样式,可以通过注册表调整菜单背景色:
- 打开注册表编辑器,定位到
HKEY_CURRENT_USER\Control Panel\Colors - 修改
Menu的值为32 35 42(对应#20232A的RGB数值) - 重启程序后,Tkinter的菜单栏会自动使用这个颜色
不过这个方法会影响所有使用系统菜单的程序,所以只适合个人自用场景。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

