Итак, у меня возникают проблемы с созданием меню с прозрачным изображением. Я использовал прозрачные изображения для кнопок и без проблем удалил фон. Но при создании Menubutton я не могу сделать изображение прозрачным.
Используя этот код, я могу создать обычную кнопку, используя изображение с прозрачным фоном (например, круг), и могу удалить фон цветной кнопки по умолчанию:
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)
Но я не могу избавиться от фона кнопки по умолчанию, может кто-нибудь помочь мне добиться этого?
В случае, если непонятно, моя цель состоит в том, чтобы меню с использованием изображения без фона, а не текста, если есть лучший способ сделать это, я был бы признателен, если бы кто-нибудь дал мне знать.
Для ясности, моя проблема, в частности, связана с кнопками ttk Menubuttons, а не с обычными кнопками tk.
Кроме того, на случай, если это вообще имеет значение, я использую подушку для обработки изображений и файлы 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