[Tutor] How to add an Image in Grid mode with Python and Tkinter?
Peter Otten
__peter__ at web.de
Mon Jul 30 14:12:53 EDT 2018
Matthew Polack wrote:
> Hi,
>
> Steadily trying to learn Python and Tkinter here with our students...
>
> Am working on a simple 'Price of Cereal Crop' calculator....and have made
> a start with the code below...
>
> I'm trying to simply add an image to our program to make the GUI more
> interesting...but most of the tutorials describe using the 'Pack'
> method.... not the grid method of layout...
Open the image with PIL, and then put the image into a Label or Button.
What layout manager you use for that widget afterwords doesn't really
matter.
> and apparently you cannot use 'Pack' and 'Grid' in the one program...
>
> Can anyone explain how I could add an image to this program? Or show me an
> example of a simple program that lets someone simply add an image and use
> the grid layout in combination.
Let's assume you want to show a picture stored in the file "wheat.jpg" on
the button with the -- misleading! -- name wheatlabel. Then
> from tkinter import *
from PIL import Image, ImageTk
> root = Tk("Crop Calculator")
# The line above produced an exception over here; I think you wanted
root = Tk()
root.title("Crop Calculator")
> # abutton = Button(root, text="Crop Prices in Australia")
>
> #Main Heading Labels
> croplabel = Label(root, text="Crop Prices in Australia", fg="white", bg=
> "green")
> instruction = Label(root, text="Please select from the following crops",
> fg= "green", bg="white")
> blanklabel = Label(root, text="", fg="green", bg="white")
> blanklabel2 = Label(root, text="", fg="green", bg="white")
> statusbar = Label(root, text="Copyright 2018", fg="white", bg="black",
> relief='sunken')
>
> #Answerlabel
> answerlabel=Label(root, text="wheatwords")
>
> # abutton.pack(side='left', fill='both', expand=True)
> croplabel.grid(columnspan=12, sticky='ew')
> instruction.grid(row=1, columnspan=12, sticky='ew')
> blanklabel.grid(row=2, columnspan=12, sticky='ew')
> statusbar.grid(row=12, columnspan=12, sticky='ew')
> blanklabel2.grid(row=11, columnspan=12, sticky='ew')
>
>
> #List of Crops
wheat_image = Image.open("wheat.jpg")
wheat_photo = ImageTk.PhotoImage(wheat_image)
wheatlabel = Button(root, image=wheat_photo, fg="black", bg="yellow")
> peaslabel = Button(root, text="Peas", fg="white", bg="green")
> lupenslabel = Button(root, text="Lupens", fg="white", bg="brown")
> barleylabel = Button(root, text="Barley", fg="white", bg="orange")
> canolalabel = Button(root, text="Canola", fg="white", bg="red")
> sorghumlabel = Button(root, text="Sorghum", fg="white", bg="ivory3")
>
> # Grid positioning of crops.
> wheatlabel.grid(row=4, column=1, sticky='ew')
> peaslabel.grid(row=4, column=7, sticky='ew')
> lupenslabel.grid(row=5, column=1, sticky='ew')
> barleylabel.grid(row=5, column=7, sticky='ew')
> canolalabel.grid(row=6, column=1, sticky='ew')
> sorghumlabel.grid(row=6, column=7, sticky='ew')
>
> # Definitions
>
> def wheatwords():
> print("Button one was pushed")
>
> wheatlabel.configure(command=wheatwords)
>
>
> root.mainloop()
>
More information about the Tutor
mailing list