2013-03-26 77 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