为什么ttk.Menubutton中的指示器没有消失?
Why does the indicator in ttk.Menubutton not disappear?
我用 ttk.Menubutton
编写了代码,但我遇到了一个问题 - 指示器没有消失,尽管可以在 tk.Menubutton
中将其删除。
代码
ttk.Menubutton
:
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")
style = ttk.Style(root)
menu = tk.Menu(root)
btn_menu = ttk.Menubutton(root, text='fegvd')
btn_menu.pack()
file = tk.Menu(btn_menu, tearoff=0, foreground='white')
file.add_command(label='ГЫГ')
style.configure('TMenubutton', background='black', foreground='white', indicatoron=0, menu=file, direction='delow', state='active')
root.mainloop()
tk.Menubutton
:
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()
截图
ttk.Menubutton
tk.Menubutton
如何解决?
指示器不会消失,因为 ttk 主题没有 indicatoron
选项并且 style.configure()
只是忽略无效选项而不是引发错误。
但是您可能可以使用 style.layout()
摆脱指标。下面的解决方案不适用于 OSX 上的默认主题,但适用于 'clam' 和 'alt'。您似乎正在使用 Windows,因此它可能也适用于 Windows 主题,否则您可以更改主题。
如果你查看 style.layout('TMenubutton')
的输出,你会得到类似
的结果
[('Menubutton.border',
{'sticky': 'nswe',
'children': [('Menubutton.focus',
{'sticky': 'nswe',
'children': [('Menubutton.indicator', {'side': 'right', 'sticky': ''}),
('Menubutton.padding',
{'expand': '1',
'sticky': 'we',
'children': [('Menubutton.label',
{'side': 'left', 'sticky': ''})]})]})]})]
要删除 'Menubutton.indicator',您只需将其从布局中删除即可:
style.layout('TMenubutton', [('Menubutton.border',
{'sticky': 'nswe',
'children': [('Menubutton.focus',
{'sticky': 'nswe',
'children': [
('Menubutton.padding',
{'expand': '1',
'sticky': 'we',
'children': [('Menubutton.label',
{'side': 'left', 'sticky': ''})]})]})]})])
如果您需要其他带有指示器的菜单按钮,您可以将 'TMenubutton' 替换为自定义名称,例如'noindicator.TMenubutton' 并执行 btn_menu.configure(style='noindicator.TMenubutton')
以将此布局用于此特定菜单按钮。
我用 ttk.Menubutton
编写了代码,但我遇到了一个问题 - 指示器没有消失,尽管可以在 tk.Menubutton
中将其删除。
代码
ttk.Menubutton
:
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")
style = ttk.Style(root)
menu = tk.Menu(root)
btn_menu = ttk.Menubutton(root, text='fegvd')
btn_menu.pack()
file = tk.Menu(btn_menu, tearoff=0, foreground='white')
file.add_command(label='ГЫГ')
style.configure('TMenubutton', background='black', foreground='white', indicatoron=0, menu=file, direction='delow', state='active')
root.mainloop()
tk.Menubutton
:
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()
截图
ttk.Menubutton
tk.Menubutton
如何解决?
指示器不会消失,因为 ttk 主题没有 indicatoron
选项并且 style.configure()
只是忽略无效选项而不是引发错误。
但是您可能可以使用 style.layout()
摆脱指标。下面的解决方案不适用于 OSX 上的默认主题,但适用于 'clam' 和 'alt'。您似乎正在使用 Windows,因此它可能也适用于 Windows 主题,否则您可以更改主题。
如果你查看 style.layout('TMenubutton')
的输出,你会得到类似
[('Menubutton.border',
{'sticky': 'nswe',
'children': [('Menubutton.focus',
{'sticky': 'nswe',
'children': [('Menubutton.indicator', {'side': 'right', 'sticky': ''}),
('Menubutton.padding',
{'expand': '1',
'sticky': 'we',
'children': [('Menubutton.label',
{'side': 'left', 'sticky': ''})]})]})]})]
要删除 'Menubutton.indicator',您只需将其从布局中删除即可:
style.layout('TMenubutton', [('Menubutton.border',
{'sticky': 'nswe',
'children': [('Menubutton.focus',
{'sticky': 'nswe',
'children': [
('Menubutton.padding',
{'expand': '1',
'sticky': 'we',
'children': [('Menubutton.label',
{'side': 'left', 'sticky': ''})]})]})]})])
如果您需要其他带有指示器的菜单按钮,您可以将 'TMenubutton' 替换为自定义名称,例如'noindicator.TMenubutton' 并执行 btn_menu.configure(style='noindicator.TMenubutton')
以将此布局用于此特定菜单按钮。