因此,在制作带有透明图像的菜单按钮时遇到了一些问题。我之前使用过透明图像作为按钮,并且移除背景没有问题。但是,当创建菜单按钮时,我似乎无法使图像透明。
使用此代码,我可以使用具有透明背景(例如圆形)的图像制作普通按钮,并且可以删除默认的彩色按钮背景:
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
答案 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()
显示的结果: