8 image grid with automatical image resize by screen resolution - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: GUI (https://python-forum.io/forum-10.html) +--- Thread: 8 image grid with automatical image resize by screen resolution (/thread-22700.html) |
8 image grid with automatical image resize by screen resolution - AlexanderO - Nov-23-2019 Hello everybody, i am very new in python and have a problem. I use Python 3 on a Raspberry. I wanted to have a little program what have an full width grid with 2 rows and 4 columns. The images inside every column i want to change by Gpio later. But i stuck at the grid with the images. I wanted to show in every field an image. This works. I decided to show images inside label (i am not sure if this is correct way). Now i have the problem that my window is full size. Depends on screen resolution. All my Images are 800 x 800. So i want to scale them down that i have in first row 4 images and in second row 4 images. For example when i have 1024 screen width every image must be not more then 256px. But exactly for this i dont find solution. I read a lot and tried several ways. But no success. In the moment the images strech all and my grid is broken. This is my actuall code: # import tkinter module from tkinter import * from tkinter.ttk import * # creating main tkinter window/toplevel master = Tk() # Turn of window frame master.overrideredirect(1) # getting screen's width & height in pixels screen_width = master.winfo_screenwidth() screen_height = master.winfo_screenheight() # New Var with Geometry size screen_resolution = str(screen_width)+'x'+str(screen_height) # Set size for Window master.geometry(screen_resolution) # Grid settings grid.rowconfigure(master, 0, weight=1) grid.columnconfigure(master, 0, weight=1) # Load images # Row 1 Standard imgr1 = PhotoImage(file=r"images\close1.png") imgr1s = imgr1.subsample(1, 1) imgr1_1 = PhotoImage(file=r"images\close2.png") imgr1_1s = imgr1_1.subsample(1, 1) imgr1_2 = PhotoImage(file=r"images\close3.png") imgr1_2s = imgr1_2.subsample(1, 1) imgr1_3 = PhotoImage(file=r"images\close4.png") imgr1_3s = imgr1_3.subsample(1, 1) # Row 2 Standard imgr2 = PhotoImage(file=r"images\close5.png") imgr2s = imgr2.subsample(2, 2) imgr2_1 = PhotoImage(file=r"images\close6.png") imgr2_1s = imgr2_1.subsample(2, 2) imgr2_2 = PhotoImage(file=r"images\close7.png") imgr2_2s = imgr2_2.subsample(2, 2) imgr2_3 = PhotoImage(file=r"images\close8.png") imgr2_3s = imgr2_3.subsample(2, 2) # Row 1 # Set images in Row 1 by Label Label(master, image=imgr1s).grid(row=0, column=0, pady=1, sticky=N+S+E+W) Label(master, image=imgr1_1s).grid(row=0, column=1, pady=1, sticky=N+S+E+W) Label(master, image=imgr1_2s).grid(row=0, column=2, pady=1, sticky=N+S+E+W) Label(master, image=imgr1_3s).grid(row=0, column=3, pady=1, sticky=N+S+E+W) # Row 2 # Set images in Row 2 by Label Label(master, image=imgr2).grid(row=1, column=0, pady=1, sticky=N+S+E+W) Label(master, image=imgr2_1).grid(row=1, column=1, pady=1, sticky=N+S+E+W) Label(master, image=imgr2_2).grid(row=1, column=2, pady=1, sticky=N+S+E+W) Label(master, image=imgr2_3).grid(row=1, column=3, pady=1, sticky=N+S+E+W) # infinite loop which can be terminated # by keyboard or mouse interrupt mainloop()Hopefully somebody can bring me to right way. Thx for help Alexander RE: 8 image grid with automatical image resize by screen resolution - joe_momma - Dec-03-2019 Alexander, I have seen this done using the PIL module, it has a function to resize called thumbnail. Instead of label they used a canvas object create_image. below is an function from a class I'm using to preview an icon image in my script hope it will point you in the right direction: def change_icon(self, size=(40,40)): # size of the icon 40x40 from PIL.ImageTk import PhotoImage, Image # 2 PIL objects self.can.delete('object') # removes exiting object from canvas pic_num= self.combo3.current() # retrieves the index number drop down pic= self.photos[pic_num] # gets photo from list print(pic) img_dir= r'../PIL/images/' img_obj= Image.open(img_dir + pic) img_obj.thumbnail(size, Image.ANTIALIAS) self.parent.one= self.img = PhotoImage(img_obj) #to prevent garbage collect icon= self.can.create_image(100,40,image=self.img, anchor='center', tag='object') self.parent.update() # self.parent is my Tk() RE: 8 image grid with automatical image resize by screen resolution - Denni - Dec-03-2019 @AlexanderO Hey it would be nice if you folks using Tkinter would put that in your subject like others have -- it helps us non-Tkinters ignore something we cannot weigh in on -- thanks for your cooperation RE: 8 image grid with automatical image resize by screen resolution - Xavier_Roga - Dec-29-2019 You can easily use PhotoViewerPro to draw texts, lines, highlights, rectangles, ovals and callout objects on images, so it's very useful to you. |