Python 如何更改tk.Menu对象的颜色?
所以我用tkinter和python制作了这个文本编辑器。它有一个带有文件下拉菜单的菜单栏 下面是一个屏幕截图: 我一直在试图改变它的颜色,但无论我做什么都没有效果 下面是一段代码片段: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)
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)