如何通过tcl访问菜单Tkinter?

2024-05-19 11:30:26 发布

您现在位置:Python中文网/ 问答频道 /正文

下午好!我正在用TkinterGUI编写一个Python程序。为了实验,我决定重写一个主题。整个程序应为深色,但菜单仍为浅色。然后我决定通过tcl文件为Menu编写设置,但我只能找到对Menubutton的访问权限,我不知道如何访问Menu本身的设置。请帮帮我

更新

我意识到我问错了问题。我需要更改窗口中的菜单

enter image description here

在这里

enter image description here

屏幕截图显示菜单是灰色的,但我需要将整个菜单更改为黑色(而不仅仅是在第二个菜单中更改的按钮)

更新2

我找到了这个链接:https://wiki.tcl-lang.org/page/Changing+Widget+Colors

有这样一个代码:

.menu configure -background color
.menu configure -foreground color
.menu configure -activebackground color
.menu configure -activeforeground color
.menu configure -disabledforeground color
.menu configure -font namedfont
.menu configure -selectcolor color
.menu configure -activeborderwidth size

据我所知,这里有一种通过tcl文件更改菜单本身的方法,但我不知道如何修改此代码以及如何应用它来调整此菜单栏

enter image description here

对不起,我的英语很笨拙,但是在俄语论坛上没有人帮我。我不得不采取极端措施


Tags: 文件代码程序权限主题configure菜单tcl
2条回答

菜单小部件的基本属性是described here(在某些情况下,它会超链接到其他地方的通用选项描述);它们被映射到directly into Tkinter,但在那里描述得不太好。可能给您带来问题的选项可能是:

  • -borderwidth
  • -activeborderwidth
  • -relief(希望不是这个;它是由菜单绑定主动管理的)

尝试显式地将前两个设置为零(它们通常为零,但可以通过Xdefaults从其他地方获取设置)

yourmenu.config(borderwidth=0, activeborderwidth=0)

后台本身由相同的方法配置(background="black"将完成此操作)。你可能需要做一点实验才能把它做好


如果要对整个应用程序执行此操作,可能需要查看通过Xdefaults设置这些值。Tkinter的书没有很好地记录这一点;Tk文档是better,但是您仍然需要通过类比来解决问题,因为API的这一部分相当模糊

tk.option_add("*Menu.borderWidth", "0")
tk.option_add("*Menu.activeBorderWidth", "0")
tk.option_add("*Menu.background", "black")
# etc.

这里的关键是,您需要使用选项数据库名称(或选项数据库类名)而不是选项名称(在菜单页面上列出),并在其前面加上*Menu.,因此它适用于将其放入数据库后创建的所有菜单

找到了一种在Tkinter中创建主菜单的有趣方法。您可以创建一个框架并放置菜单按钮,您可以将弹出菜单附加到其中

代码:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

root.option_add("*Menu.borderWidth", "0")
root.option_add("*Menu.activeBorderWidth", "0")
root.option_add("*Menu.background", "black")


menu = tk.Menu(root)

btn_menu = tk.Menubutton(root, text='fegvd')
btn_menu.pack()


file = tk.Menu(btn_menu, tearoff=0, foreground='white')
file.add_command(label='ГЫГ')

btn_menu.configure(background='black', foreground='white', indicator=0, menu=file, state='active')

root.mainloop()

我没有找到别的办法

相关问题 更多 >

    热门问题