2013-03-26 66 views
0

当我加载一个透明的图像:图片显示问题

def load_image(path): 
    img = Image.open(path) 
    return ImageTk.PhotoImage(img) 

class Home_Screen(threading.Thread): 
    def __init__(self): 
     threading.Thread.__init__(self) 
     self.home = Tk() 
     self.home.resizable(width = False,height = False) 
     self.home.geometry("700x500+300+100") 
     self.start() 

    def run(self): 
     self.images() 
     Label(self.home, image = self.background).pack() # Put it in the display window 
     button_instructions = Label(self.home,image = self.b_instructions).place(x = 300,y = 200) 
     self.home.mainloop() 

    def images(self): 
     self.background = load_image("Images/night-sky.jpg") 
     self.b_instructions = load_image("button_instructions.png") 

    def start_game(self): 
     self.home.destroy() 

Home = Home_Screen() 

我与它周围的白色边框的图像。有谁知道为什么原始透明度不被保留?如果可以,请提供解决方案。

Image of error

+0

只要确定,你确定图像有一个alpha通道(像PNG,而不是JPEG)? – 2013-03-26 00:36:04

+0

我敢肯定,我有一个透明的.png图像,我检查了几次 – 2013-03-26 00:37:52

+0

首先,你必须弄清楚_where_透明度正在迷失。获取'img'模式以确保它具有alpha通道,然后执行'pixels = img.load()'并确保某些像素实际上是透明的。尝试将'img'保存到一个新的PNG文件,并确保它仍然是透明的。如果这一切都有效,那么问题_is_在'PhotoImage'中,或者以您显示它的方式。但我敢打赌,事实并非如此。 – abarnert 2013-03-26 00:57:16

回答

0

使用画布,而不是标签控件。透明度不会丢失,因为您看到的是小部件的背景。

def run(self): 
    img_sky = ImageTk.PhotoImage(file="Images/night-sky.jpg") 
    img_button = ImageTk.PhotoImage(file="button_instructions.png") 
    self.canvas = Canvas(self.home, width=700, height=500) 
    self.canvas.create_image(0, 0, image=img_sky) 
    self.canvas.create_image(300, 200, image=img_button) 
    self.canvas.pack() 
    self.home.mainloop() 
+0

非常感谢!你是一个拯救生命的人!它效果很好 – 2013-03-26 20:00:31