制作透明的菜单按钮图像

时间:2019-04-06 19:06:26

标签: python tkinter

因此,在制作带有透明图像的菜单按钮时遇到了一些问题。我之前使用过透明图像作为按钮,并且移除背景没有问题。但是,当创建菜单按钮时,我似乎无法使图像透明。

使用此代码,我可以使用具有透明背景(例如圆形)的图像制作普通按钮,并且可以删除默认的彩色按钮背景:

button = tk.Button(self, compound = tk.TOP, borderwidth = 0, image = photo, text="some text", command = lambda: somemethod())

我尝试使用以下代码将其复制到菜单按钮上:

style = ttk.Style()
style.configure("test.TButton", borderwidth = 0)

self.mb = ttk.Menubutton(self, text = "Menu", style = "test.TButton", image = photo)

但是我无法摆脱默认按钮背景,任何人都可以帮助我实现这一目标吗?

如果不清楚,我的目标是要有一个使用不带背景的图像而不是文本的菜单按钮,如果有更好的方法可以做到这一点,请让我知道。< / p>

需要明确的是,我的问题特别是与ttk菜单按钮有关,而不是常规的tk按钮。

另外,万一有问题,我正在使用Pillow进行图像处理并使用PNG文件。

这是该问题的最少代码:

""" os imports """
import os

""" tkinter imports """
import tkinter as tk
from tkinter import ttk

""" pillow imports """
from PIL import Image, ImageTk

class MainView(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)

        home_path = os.path.normpath("Java.png")
        self.home_icon = ImageTk.PhotoImage(Image.open(home_path))

        style = ttk.Style()
        style.configure("test.TButton", borderwidth = 0, compound = tk.TOP)

        self.mb = ttk.Menubutton(parent, text = "Menu", style = "test.TButton", image = self.home_icon)
        self.mb.grid(row = 0, column = 0, sticky = tk.N + tk.W)

        button = tk.Button(parent, compound = tk.TOP, borderwidth = 0, image = self.home_icon, text="test", command = lambda: test()).grid(row = 1, column = 0, sticky = tk.N + tk.W)

    def test(self):
        pass

if __name__ == "__main__":
    root = tk.Tk()

    """ change aspect ratio of the program """
    sizex = 1280
    sizey = 720
    posx  = 0
    posy  = 0
    root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))

    main = MainView(root)
    root.mainloop()

链接到图像: https://imgur.com/a/ca3wZ66

1 个答案:

答案 0 :(得分:0)

我不确定您要做什么,但这documentation说:

  

Menubutton小部件是始终可见的下拉菜单的一部分。它与<{>}始终 结合使用,与Menu小部件结合使用,该小部件控制用户单击Menubutton时出现的内容。

(强调我的)

所以下面的操作可以做到,据我所知,似乎可以创建一个具有透明背景的ttk.Menubutton

import os

""" tkinter imports """
import tkinter as tk
from tkinter import ttk

""" pillow imports """
from PIL import Image, ImageTk

class MainView(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)

        home_path = os.path.normpath("Java.png")
        self.home_icon = ImageTk.PhotoImage(Image.open(home_path))

        style = ttk.Style()
        style.configure("test.TButton", borderwidth=0, compound=tk.TOP)

        self.mb = ttk.Menubutton(parent, text="Menu", style="test.TButton",
                                 image=self.home_icon)
        self.mb.grid(row=0, column=0, sticky=tk.N + tk.W)

        self.menu = tk.Menu(self.mb, tearoff=False)
        self.menu.add_command(label='Test', command=lambda: self.test)

        self.mb['menu'] = self.menu

#        button = tk.Button(parent, compound=tk.TOP, borderwidth=0, image=self.home_icon,
#                           text="test", command=lambda: self.test)
#        button.grid(row=1, column=0, sticky=tk.N + tk.W)

    def test(self):
        pass

if __name__ == "__main__":
    root = tk.Tk()

    """ change aspect ratio of the program """
    sizex = 800
    sizey = 600
    posx  = 50
    posy  = 50
    root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))

    main = MainView(root)
    root.mainloop()

显示的结果:

screenshot showing menubutton