Prev: looping through possible combinations of McNuggets packs of 6,9and 20
Next: How does Python get the value for sys.stdin.encoding?
From: ChrisChia on 11 Aug 2010 19:50 Hi i have the following problem with Python Tkinter. I switch to switch the image background (which i used Tkinter.Label with image arg to display on the GUI). How can I do that? the callback function which i have created doesn't seem to work... some advice? below is my code: import Tkinter as tk from PIL import Image, ImageTk root = tk.Tk() # having problem with switching the image def callback(event): global root root.panel1.pack_forget() root.panel1.image = image2 root.panel1.pack() def app(): root.title('FIT 2022 Assignment 1') # pick an image file you have .bmp .jpg .gif. .png # load the file and covert it to a Tkinter image object imageFile = "c:\\test1.jpg" image1 = ImageTk.PhotoImage(Image.open(imageFile)) imageFile2 = "c:\\test2.jpg" image2 = ImageTk.PhotoImage(Image.open(imageFile2)) # get the image size w = image1.width() h = image1.height() # position coordinates of root 'upper left corner' x = 0 y = 0 # make the root window the size of the image root.geometry("%dx%d+%d+%d" % (w, h, x, y)) # root has no image argument, so use a label as a panel panel1 = tk.Label(root, image=image1) panel1.pack(side='top', fill='both', expand='yes') panel1.image = image1 panel1.bind("<Button-1>", callback) panel1.pack() root.mainloop() app()
From: Eric Brunel on 12 Aug 2010 04:42
In article <ecd3ebca-8192-445a-a60c-c688b18f4287(a)i4g2000prf.googlegroups.com>, ChrisChia <chrischia82(a)gmail.com> wrote: > Hi i have the following problem with Python Tkinter. > I switch to switch the image background (which i used Tkinter.Label > with image arg to display on the GUI). > > How can I do that? the callback function which i have created doesn't > seem to work... It is usually way better to post the actual error than just saying "doesn't seem to work"� Here your problem is quite clear, but in most circumstances, it would be quite difficult to figure out what's happening. > some advice? > > below is my code: > > > import Tkinter as tk > from PIL import Image, ImageTk > > root = tk.Tk() > > # having problem with switching the image > def callback(event): > global root > root.panel1.pack_forget() > root.panel1.image = image2 The variable image2 is not known in this context, so no wonder the callback doesn't work. Let me guess: it says something like "NameError: name 'image2' is not defined"? > root.panel1.pack() > > > def app(): > > root.title('FIT 2022 Assignment 1') > > # pick an image file you have .bmp .jpg .gif. .png > # load the file and covert it to a Tkinter image object > imageFile = "c:\\test1.jpg" > image1 = ImageTk.PhotoImage(Image.open(imageFile)) > imageFile2 = "c:\\test2.jpg" > image2 = ImageTk.PhotoImage(Image.open(imageFile2)) Here, you create image2 as a local variable in function app. So the variable name will not be known outside of app. If you want it to be global, you have to add a line: global image2 at the beginning of your app function. Then it should work correctly. By the way, I usually find it better to organize a GUI into classes rather than using functions. This way, you could store the images in object attributes and define your callback as a method, and not as a function. > # get the image size > w = image1.width() > h = image1.height() > > > # position coordinates of root 'upper left corner' > x = 0 > y = 0 > > > # make the root window the size of the image > root.geometry("%dx%d+%d+%d" % (w, h, x, y)) > > > # root has no image argument, so use a label as a panel > panel1 = tk.Label(root, image=image1) > panel1.pack(side='top', fill='both', expand='yes') > panel1.image = image1 > panel1.bind("<Button-1>", callback) > > > panel1.pack() > root.mainloop() > > > app() HTH - Eric - |