2010-08-14 14 views
18

मैं एक टिंकर लेबल पर एक छवि को स्वैप करने में सक्षम होना चाहता हूं, लेकिन मुझे यकीन नहीं है कि विजेट को बदलने के अलावा, इसे कैसे किया जाए।टिंकर लेबल विजेट की छवि को कैसे अपडेट करें?

वर्तमान में, मैं बहुत की तरह एक छवि प्रदर्शित कर सकते हैं:

import Tkinter as tk 
import ImageTk 

root = tk.Tk() 
img = ImageTk.PhotoImage(Image.open(path)) 
panel = tk.Label(root, image = img) 
panel.pack(side = "bottom", fill = "both", expand = "yes") 
root.mainloop() 

हालांकि, जब उपयोगकर्ता हिट, कहते हैं कि ENTER कुंजी, मैं छवि को बदलना चाहते हैं।

import Tkinter as tk 
import ImageTk 

root = tk.Tk() 

img = ImageTk.PhotoImage(Image.open(path)) 
panel = tk.Label(root, image = img) 
panel.pack(side = "bottom", fill = "both", expand = "yes") 

def callback(e): 
    # change image 

root.bind("<Return>", callback) 
root.mainloop() 

क्या यह संभव है?

उत्तर

29

विधि label.configurepanel.configure(image=img) में काम करता है।

क्या मैं भूल गया था कि छवि को हटाने से कचरा संग्रह को रोकने के लिए panel.image=img शामिल था।

import Tkinter as tk 
import ImageTk 


root = tk.Tk() 

img = ImageTk.PhotoImage(Image.open(path)) 
panel = tk.Label(root, image=img) 
panel.pack(side="bottom", fill="both", expand="yes") 

def callback(e): 
    img2 = ImageTk.PhotoImage(Image.open(path2)) 
    panel.configure(image=img2) 
    panel.image = img2 

root.bind("<Return>", callback) 
root.mainloop() 

मूल कोड काम करता है, क्योंकि छवि वैश्विक चर img में संग्रहीत है:

निम्नलिखित नया संस्करण है।

+0

क्या कॉलबैक में लाइन 'panel.image = img2' पढ़नी चाहिए? – 101

+0

@figs ऐसा लगता है कि यह समझ में आता है। मुझे विशेष रूप से इस उपयोग को संशोधित करने की याद नहीं है, लेकिन यह चार साल पहले भी था। क्या आप इसे सत्यापित करने के लिए परीक्षण कर सकते हैं? – skeggse

+0

हां, शायद यह समस्या थी। थोड़ा अलग कोड के साथ परीक्षण किया, लेकिन एक ही मुद्दे के साथ। –

0

ऐसा करने का एक और विकल्प।

ऑब्जेक्ट उन्मुख प्रोग्रामिंग का उपयोग करना और छवि को अपडेट करने के लिए एक इंटरैक्टिव इंटरफेस के साथ।

from Tkinter import * 
import tkFileDialog 
from tkFileDialog import askdirectory 
from PIL import Image 

class GUI(Frame): 

    def __init__(self, master=None): 
     Frame.__init__(self, master) 
     w,h = 650, 650 
     master.minsize(width=w, height=h) 
     master.maxsize(width=w, height=h) 
     self.pack() 

     self.file = Button(self, text='Browse', command=self.choose) 
     self.choose = Label(self, text="Choose file").pack() 
     self.image = PhotoImage(file='cualitativa.gif') 
     self.label = Label(image=self.image) 


     self.file.pack() 
     self.label.pack() 

    def choose(self): 
     ifile = tkFileDialog.askopenfile(parent=self,mode='rb',title='Choose a file') 
     path = ifile.name 
     self.image2 = PhotoImage(file=path) 
     self.label.configure(image=self.image2) 
     self.label.image=self.image2 


root = Tk() 
app = GUI(master=root) 
app.mainloop() 
root.destroy() 

डिफ़ॉल्ट छवि का उपयोग करना चाहते के लिए 'cualitativa.jpg' बदलें।

संबंधित मुद्दे