2014-01-11 169 views
0

我正試圖實現簡單的圖像查看器,您可以從2張圖片中進行選擇。我有一個提供這些照片的menubutton。選擇其中一個圖像後,程序將創建3個或5個按鈕。我想追加到每個這些按鈕不同的圖像,所以第一個按鈕將有一個圖像,第二個按鈕將有另一個圖像等等。我用for循環創建了一個函數來創建這些按鈕,但是從這一點開始無法繼續。我可以向所有人添加一張圖片,但不能一張一張地添加不同的圖片。 感謝您的幫助圖像查看器/按鈕圖像

try: 
    import Tkinter as tk 
except ImportError: 
    import tkinter as tk 

from functools import partial 
from PIL import Image, ImageTk 

class Halabala(): 
    def __init__(self): 
     self.master = tk.Tk() 
     self.master.geometry("1100x700") 

     self.lists_labels = [] 

     self.rbutton = tk.Menubutton(self.master, text = "Choose picture") 
     self.picks2 = tk.Menu(self.rbutton) 
     self.rbutton.config(menu=self.picks2) 
     self.picks2.add_command(label = "Spider", command = partial(self.create_labels,3)) 
     self.picks2.add_command(label = "Sugar", command = partial(self.create_labels,5)) 
     self.rbutton.config(width = 30, bg = "white", bd = 5, relief = tk.RAISED) 
     self.rbutton.place(x = 900, y = 30) 

     self.master.mainloop() 

    def create_labels(self, num): 
     self.picture = Image.open("blue.gif") 
     self.picture.thumbnail((130,130)) 
     self.tkim = ImageTk.PhotoImage(self.picture) 

     for label in self.lists_labels: 
      label.destroy() 
     self.lists_labels=[] 

     for i in range(num): 
      but = tk.Button(self.master, image = self.tkim) 
      but.grid(row = i + 1, column = 0) 
      self.lists_labels.append(but) 


myapp = Halabala() 
+0

提示:你需要的圖像列表使用了不同的按鈕。目前,您只能使用一張圖片。然後你可以像'but = tk.Button(self.master,image = self.list_tkims [i])那樣做'' – joaquin

+0

非常感謝,不知道它實際上有多簡單,但我還有一個問題。有沒有辦法創建一個函數,它將所有的圖像轉換爲ImageTk,然後以某種方式將它們保存爲「tkim_1」,「tkim_2」等,而不是逐個轉換每個圖像。以下是我嘗試去做的事情:http://pastie.org/8624064 – Chilcone

+0

是的,你可以使用循環來創建它們,但將它們保存在列表中以便之後使用它們。現在你在每個循環中覆蓋self.name。 – joaquin

回答

0

這是有關您的問題代碼:

class Halabala(): 
    def __init__(self): 
     ............. 
     self.pictures = ["pavuk1", "pavuk2", "pavuk3"] 

     self.lists_labels = [] 
     self.lists_images = [] 

     self.init_image_list() 
     ............ 

    def init_image_list(self): 
     for i in self.pictures: 
      picture = Image.open(i) 
      picture.thumbnail((130, 130)) 
      self.lists_images.append(ImageTk.PhotoImage(picture)) 

    def create_labels(self, num): 
     for label in self.lists_labels: 
      label.destroy() 
     self.lists_labels=[] 

     for i in range(num): 
      but = tk.Button(self.master, image = self.lists_images[i]) 
      but.grid(row = i + 1, column = 0) 
      self.lists_labels.append(but) 
+0

非常感謝,但我現在怎樣才能訪問原始圖像(而不是縮略圖),因爲我想創建一個主標籤,然後使用按鈕上的圖像更新其圖像。所以當我點擊帶圖像的第一個按鈕時,該圖像將出現在標籤上,然後點擊第二個按鈕,第二個圖像將出現,依此類推。 – Chilcone

+0

@Chilcone如果答案對你有用,你可以投票。如果你有一個新的,不同的問題,打開一個具體問題的新職位。 [只是問題...和答案](http://stackoverflow.com/tour)。 – joaquin