Python 如何更改tk.Menu对象的颜色?

Python 如何更改tk.Menu对象的颜色?,python,tkinter,Python,Tkinter,所以我用tkinter和python制作了这个文本编辑器。它有一个带有文件下拉菜单的菜单栏 下面是一个屏幕截图: 我一直在试图改变它的颜色,但无论我做什么都没有效果 下面是一段代码片段: class MenuBar: def __init__(self, mainClass): fontSpecs = ("ubuntu", 9) menuBar = tk.Menu(mainClass.win, font=fontSpecs)

所以我用tkinter和python制作了这个文本编辑器。它有一个带有文件下拉菜单的菜单栏

下面是一个屏幕截图:

我一直在试图改变它的颜色,但无论我做什么都没有效果

下面是一段代码片段:

class MenuBar:
    def __init__(self, mainClass):
        fontSpecs = ("ubuntu", 9)

        menuBar = tk.Menu(mainClass.win, font=fontSpecs)
        mainClass.win.config(bg="#3C3F41", menu=menuBar)

        fileDropDown = tk.Menu(menuBar, font=fontSpecs, tearoff=0, fg="#AFB1B3", bg="#313335")
        fileDropDown.add_command(label="New File", command=mainClass.NewFile, accelerator="Ctrl+N")
        fileDropDown.add_command(label="Open File", command=mainClass.OpenFile, accelerator="Ctrl+O")
        fileDropDown.add_command(label="Save", command=mainClass.Save, accelerator="Ctrl+S")
        fileDropDown.add_command(label="Save As", command=mainClass.SaveAs, accelerator="Ctrl+Shift+S")
        fileDropDown.add_separator()
        fileDropDown.add_command(label="Exit", command=mainClass.Exit)

        menuBar.add_cascade(label="File", menu=fileDropDown)
下面是主类的
\uuuu init\uuuu()
方法:

class TextEditor:
    def __init__(self, win: tk.Tk):
        win.title(f"Untitled - {name}")
        win.geometry("1100x600")

        fontSpecs = ("ubuntu", 12)

        self.win = win
        self.fileName = None

        self.textArea = tk.Text(self.win, font=fontSpecs, insertbackground="#AFB1B3", fg="#AFB1B3", bg="#313335")
        self.scroll = tk.Scrollbar(self.win, command=self.textArea.yview())
        self.textArea.configure(yscrollcommand=self.scroll.set)
        self.textArea.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

        font = tk_font.Font(font=self.textArea["font"])
        tab = font.measure("    ")  # 4 empty spaces
        self.textArea.config(tabs=tab)

        self.scroll.pack(side=tk.RIGHT, fill=tk.Y)

        self.menuBar = MenuBar(self)

如果您需要更多信息,请询问。

您不能更改
tk.Menu
对象的颜色。

您可以从Tkinter小部件创建类似的内容,如
Frame
Menu
。非常简单,我们可以将菜单的
post(x,y)
方法与按钮的标签绑定,以在任何
(x,y)
坐标处获得菜单,但这里我们将使用
x=标签的根x坐标
y=标签的根x坐标+标签的高度

因为我在macOS上,而且我没有访问windows机器的权限,所以我无法在windows上测试它,但我确信它在windows上应该可以正常工作

这是示例,不是完整的版本。这将使您开始,您可以根据需要修改或添加功能

将tkinter作为tk导入
类CustomMenuBar(tk.Frame):
def uuu init uuuu(self,master=None,cnf={},**kw):
千瓦=tk._cnfmerge((立方英尺,千瓦))
千瓦['relieve']=kw.get('relieve','raised')
self._fg=kw.pop('fg',kw.pop('前台','黑色'))
自身。_超过_bg=kw.pop(‘背景过高’、‘蓝色’)
超级()
self._lb_list=[]
按def键(自身、标签、命令=无):
“”“内部函数。\n
当用户单击菜单栏时调用它。”“”
label.menu.post(label.winfo_rootx(),
label.winfo_rooty()+label.winfo_height()+5)#5填充(相应设置)
if command:command()#调用传递给'add_menu'方法的函数。
def添加菜单(自身、标题、菜单、命令=无):
“”“添加菜单标签。”“”
l=tk.Label(self,text=title,fg=self.\u fg,bg=self['bg'],padx=2,pady=2)
l、 包装(左侧)
l、 绑定(“”,lambda e:l.config(bg=self.\u over\u bg))
l、 绑定(“”,lambda e:l.config(bg=self['bg']))
l、 菜单=菜单#易于使用实例访问菜单
#保存在“self.\u lb_”列表中的标签的`
l、 绑定(“”,lambda e:self._按(l,命令))
self._lb_list.append(l)
def demo():
root=tk.tk()
root.geometry('200x200')
mb=CustomMenuBar(根,背景为黑色,前景为白色,背景为“#2C41FF”)
mb.pack(side='top',expand=1,fill='x',anchor='n')
filemenu=tk.Menu(mb)
filemenu.add_命令(label='New')
filemenu.add_命令(label='Open')
filemenu.add_separator()
filemenu.add_命令(label='Exit',command=root.quit)
编辑菜单=传统菜单(mb)
editmenu.add_命令(label='Copy')
editmenu.add_命令(label='Paste')
mb.添加菜单(“文件”,文件菜单)
mb.添加菜单(“编辑”,编辑菜单)
root.mainloop()
如果名称=“\uuuuu main\uuuuuuuu”:
演示()

如果可以,请添加实际图像,而不是链接。请回答您的问题并提供一个链接。您可以从
框架中使用
菜单及其方法创建一个。@Saad,您能举个例子吗?这是否回答了您的问题?你可以自己上课,但那会很难。@cs1349459:没有什么是难的,如果你认为它难,那么你就是在让它难,只要想想它有多难lol。@Saad im hard:(lel)