Tkinter - 按钮图象透明背景

时间:2017-06-02 14:43:05

标签: python python-2.7 tkinter label transparency

我已经找到了如何为按钮设置图像,这些图像位于标签的顶部(我认为我可能会以冗长的方式进行操作,因为我无法在我的Mac上安装PIL出于某种原因)。无论如何,它在某种程度上应该起作用 - 我遇到的问题是它在任何一侧添加了空白区域,然后图像本身没有显示其透明背景。

enter image description here

我使用的代码如下:

from tkinter import *
#from PIL import Image

root = Tk()


#Removes the title bar and places over mac top bar
root.tk.call("::tk::unsupported::MacWindowStyle", "style", root._w, "plain", "none")
# Makes the app full screen
#root.wm_attributes('-fullscreen', 1)

root.geometry('{}x{}'.format(480, 320))
#root.attributes('-topmost', True)

def quitApp():
    # mlabel = Label (root, text = 'Close').pack()
    root.destroy()


background_img = PhotoImage(file="images/bg.gif")
scanBtn_img = PhotoImage(file="images/scanBtn.gif")

background = Label(root,
                   compound = CENTER,
                   quitButton = Button(image=scanBtn_img, command = quitApp).pack(),
                   image = background_img).pack(side="right")

background.image = background_img # keep a reference!


root.mainloop()

1 个答案:

答案 0 :(得分:0)

根据我的理解,tkinter本身支持像GIF这样的图像的透明度。

我把你的代码切碎了一点,但它对我有用。也许您的代码设置方式存在问题。您的标签上还有一个按钮。我认为你不需要两者都有。你可以在你想要的地方创建按钮。

仅供参考,我创建了一个标签和一个包含在黑色背景不同侧面的按钮,以显示图像的透明度。

以下是我用来测试具有透明度的gif的代码。我在python 3.6和2.7上测试了这个以防万一。

from tkinter import *

root = Tk()

def quitApp():
    root.destroy()

background_img = PhotoImage(file="Colors/sa.gif")
scanBtn_img = PhotoImage(file="Colors/sa.gif")

background = Label(root,bg='black', image = background_img).pack(side = RIGHT)               
quitButton = Button(bg='black', image=scanBtn_img, command = quitApp).pack(side = LEFT)
backgroundimage = background_img # keep a reference!

root.mainloop()

更新:我使用了你在评论中链接的gif

结果如下。

enter image description here

更新

在进行了一些挖掘之后,我发现了可能对Mac OS有用的东西:

我现在没有Mac测试,请告诉我这是否适合您:

from tkinter import *

root = Tk()

# Hide the root window drag bar and close button
root.overrideredirect(True)
# Make the root window always on top
root.wm_attributes("-topmost", True)
# Make the window content area transparent
root.wm_attributes("-transparent", True)
# Set the root window background color to a transparent color
root.config(bg='systemTransparent')

def quitApp():
    root.destroy()

background_img = PhotoImage(file="Colors/1.gif")
scanBtn_img = PhotoImage(file="Colors/1.gif")

background = Label(root,bg='black', image = background_img).pack(side = RIGHT)
background.config(bg='systemTransparent')
quitButton = Button(bg='black', image=scanBtn_img, command = quitApp).pack(side = LEFT)
quitButton.config(bg='systemTransparent')
backgroundimage = background_img # keep a reference!

root.mainloop()