Hi deanhystad
https://stackoverflow.com/questions/4373...-with-grid result, button images will not show:
Tried the pack method, button images will not show:
https://stackoverflow.com/questions/4373...-with-grid result, button images will not show:
import tkinter as tk from winsound import * # for sound from tkinter import * # for photo images from PIL import ImageTk, Image from tkinter.ttk import * LABEL_BG = "#ccc" # Light gray. ROWS, COLS = 10, 6 # Size of grid. ROWS_DISP = 10 # Number of rows to display. COLS_DISP = 10 # Number of columns to display. # Sound Files play1 = lambda: PlaySound('c:\images\siren.wav', SND_FILENAME) play2 = lambda: PlaySound('c:\images\pling.wav', SND_FILENAME) class MyApp(tk.Tk): def __init__(self, title="Sample App", *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) self.title(title) self.configure(background="Gray") self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) master_frame = tk.Frame(self, bg="Light Blue", bd=3, relief=tk.RIDGE) master_frame.grid(sticky=tk.NSEW) master_frame.columnconfigure(0, weight=1) label1 = tk.Label(master_frame, text="Frame1 Contents", bg=LABEL_BG) label1.grid(row=0, column=0, pady=5, sticky=tk.NW) frame1 = tk.Frame(master_frame, bg="Green", bd=2, relief=tk.GROOVE) frame1.grid(row=1, column=0, sticky=tk.NW) cb_var1 = tk.IntVar() checkbutton1 = tk.Checkbutton(frame1, text="StartCheckBox", variable=cb_var1) checkbutton1.grid(row=0, column=0, padx=2) label2 = tk.Label(master_frame, text="Frame2 Contents", bg=LABEL_BG) label2.grid(row=2, column=0, pady=5, sticky=tk.NW) # Create a frame for the canvas and scrollbar(s). frame2 = tk.Frame(master_frame) frame2.grid(row=3, column=0, sticky=tk.NW) # Add a canvas in that frame. canvas = tk.Canvas(frame2, bg="PURPLE") canvas.grid(row=0, column=0) # Create a vertical scrollbar linked to the canvas. vsbar = tk.Scrollbar(frame2, orient=tk.VERTICAL, command=canvas.yview) vsbar.grid(row=0, column=1, sticky=tk.NS) canvas.configure(yscrollcommand=vsbar.set) # Create a horizontal scrollbar linked to the canvas. hsbar = tk.Scrollbar(frame2, orient=tk.HORIZONTAL, command=canvas.xview) hsbar.grid(row=1, column=0, sticky=tk.EW) canvas.configure(xscrollcommand=hsbar.set) # Create a frame on the canvas to contain the buttons. buttons_frame = tk.Frame(canvas, bg="Red", bd=2) # Image files to be uploaded in window1 photo1 = PhotoImage(file="C:\images\plane.png") photo2 = PhotoImage(file="C:\images\car.png") photo3 = PhotoImage(file="c:\images\_apple.png") # Add the buttons to the frame. for i in range(1, ROWS+1): for j in range(1, COLS+1): button1 = tk.Button(buttons_frame, padx=1, pady=1, relief=tk.RIDGE, text="Plane", command=play1, image=photo1) button1.grid(row=1, column=1, sticky='news') button2 = tk.Button(buttons_frame, padx=2, pady=2, relief=tk.RIDGE, text="Car", command=play2, image=photo2) button2.grid(row=2, column=1, sticky='news') button3 = tk.Button(buttons_frame, padx=1, pady=1, relief=tk.RIDGE, text="Ball", command=play2, image=photo3) button3.grid(row=1, column=2, sticky='news') button4 = tk.Button(buttons_frame, padx=2, pady=2, relief=tk.RIDGE, text="Dog", command=play2) button4.grid(row=2, column=2, sticky='news') # Create canvas window to hold the buttons_frame. canvas.create_window((0,0), window=buttons_frame, anchor=tk.NW) buttons_frame.update_idletasks() # Needed to make bbox info available. bbox = canvas.bbox(tk.ALL) # Get bounding box of canvas with Buttons. #print('canvas.bbox(tk.ALL): {}'.format(bbox)) # Define the scrollable region as entire canvas with only the desired # number of rows and columns displayed. w, h = bbox[2]-bbox[1], bbox[3]-bbox[1] dw, dh = int((w/COLS) * COLS_DISP), int((h/ROWS) * ROWS_DISP) canvas.configure(scrollregion=bbox, width=dw, height=dh) label3 = tk.Label(master_frame, text="Frame3 Contents", bg=LABEL_BG) label3.grid(row=4, column=0, pady=5, sticky=tk.NW) frame3 = tk.Frame(master_frame, bg="Blue", bd=2, relief=tk.GROOVE) frame3.grid(row=5, column=0, sticky=tk.NW) cb_var2 = tk.IntVar() checkbutton2 = tk.Checkbutton(frame3, text="EndCheckBox", variable=cb_var2) checkbutton2.grid(row=0, column=0, padx=2) if __name__ == "__main__": app = MyApp("Scrollable Canvas") app.mainloop()---------------------------------------------------
Tried the pack method, button images will not show:
import tkinter as tk from winsound import * # for sound from tkinter import * # for photo images from PIL import ImageTk, Image from tkinter.ttk import * LABEL_BG = "#ccc" # Light gray. ROWS, COLS = 10, 6 # Size of grid. ROWS_DISP = 10 # Number of rows to display. COLS_DISP = 10 # Number of columns to display. # Sound Files play1 = lambda: PlaySound('c:\images\siren.wav', SND_FILENAME) play2 = lambda: PlaySound('c:\images\pling.wav', SND_FILENAME) class MyApp(tk.Tk): def __init__(self, title="Sample App", *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) self.title(title) self.configure(background="Gray") self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) master_frame = tk.Frame(self, bg="Light Blue", bd=3, relief=tk.RIDGE) master_frame.grid(sticky=tk.NSEW) master_frame.columnconfigure(0, weight=1) label1 = tk.Label(master_frame, text="Frame1 Contents", bg=LABEL_BG) label1.grid(row=0, column=0, pady=5, sticky=tk.NW) frame1 = tk.Frame(master_frame, bg="Green", bd=2, relief=tk.GROOVE) frame1.grid(row=1, column=0, sticky=tk.NW) cb_var1 = tk.IntVar() checkbutton1 = tk.Checkbutton(frame1, text="StartCheckBox", variable=cb_var1) checkbutton1.grid(row=0, column=0, padx=2) label2 = tk.Label(master_frame, text="Frame2 Contents", bg=LABEL_BG) label2.grid(row=2, column=0, pady=5, sticky=tk.NW) # Create a frame for the canvas and scrollbar(s). frame2 = tk.Frame(master_frame) frame2.grid(row=3, column=0, sticky=tk.NW) # Add a canvas in that frame. canvas = tk.Canvas(frame2, bg="PURPLE") canvas.grid(row=0, column=0) # Create a vertical scrollbar linked to the canvas. vsbar = tk.Scrollbar(frame2, orient=tk.VERTICAL, command=canvas.yview) vsbar.grid(row=0, column=1, sticky=tk.NS) canvas.configure(yscrollcommand=vsbar.set) # Create a horizontal scrollbar linked to the canvas. hsbar = tk.Scrollbar(frame2, orient=tk.HORIZONTAL, command=canvas.xview) hsbar.grid(row=1, column=0, sticky=tk.EW) canvas.configure(xscrollcommand=hsbar.set) # Create a frame on the canvas to contain the buttons. buttons_frame = tk.Frame(canvas, bg="Red", bd=2) # Image files to be uploaded in window1 photo1 = PhotoImage(file="C:\images\plane.png") photo2 = PhotoImage(file="C:\images\car.png") photo3 = PhotoImage(file="c:\images\_apple.png") # Add the buttons to the frame. for i in range(1, ROWS+1): for j in range(1, COLS+1): button1 = tk.Button(buttons_frame, padx=1, pady=1, relief=tk.RIDGE, text="Plane", command=play1, image=photo1) button1.pack(side=LEFT) button2 = tk.Button(buttons_frame, padx=2, pady=2, relief=tk.RIDGE, text="Car", command=play2, image=photo2) button2.pack(side=LEFT) button3 = tk.Button(buttons_frame, padx=1, pady=1, relief=tk.RIDGE, text="Ball", command=play2, image=photo3) button3.pack(side=RIGHT) button4 = tk.Button(buttons_frame, padx=2, pady=2, relief=tk.RIDGE, text="Dog", command=play2) button4.pack(side=RIGHT) # Create canvas window to hold the buttons_frame. canvas.create_window((0,0), window=buttons_frame, anchor=tk.NW) buttons_frame.update_idletasks() # Needed to make bbox info available. bbox = canvas.bbox(tk.ALL) # Get bounding box of canvas with Buttons. #print('canvas.bbox(tk.ALL): {}'.format(bbox)) # Define the scrollable region as entire canvas with only the desired # number of rows and columns displayed. w, h = bbox[2]-bbox[1], bbox[3]-bbox[1] dw, dh = int((w/COLS) * COLS_DISP), int((h/ROWS) * ROWS_DISP) canvas.configure(scrollregion=bbox, width=dw, height=dh) label3 = tk.Label(master_frame, text="Frame3 Contents", bg=LABEL_BG) label3.grid(row=4, column=0, pady=5, sticky=tk.NW) frame3 = tk.Frame(master_frame, bg="Blue", bd=2, relief=tk.GROOVE) frame3.grid(row=5, column=0, sticky=tk.NW) cb_var2 = tk.IntVar() checkbutton2 = tk.Checkbutton(frame3, text="EndCheckBox", variable=cb_var2) checkbutton2.grid(row=0, column=0, padx=2) if __name__ == "__main__": app = MyApp("Scrollable Canvas") app.mainloop()