1

我用 编写了代码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

在此处输入图像描述

如何解决?

4

1 回答 1

1

指示器不会消失,因为 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')为这个特定的菜单按钮使用此布局。

于 2020-04-21T08:53:36.367 回答