Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tkinter] Grids
#1
I been following the tutorial here on grids making my own little project and have ran into a snag.
I have a menu of button across the top and can't seem to get all buttons correct with and sizing.
I am posting all code but will point out problem area. Any help with what I'm doing wrong would be great. Thanks

#! /usr/bin/env python3.8

import tkinter as tk
from tkinter import ttk
from PIL import Image, ImageTk
import string


class MainWindow:
    def __init__(self, master):
        self.master = master

        self.main_frame_style = ttk.Style()
        self.main_frame_style.configure('MainFrame.TFrame', background = 'slategray')
        self.main_frame = ttk.Frame(self.master, style = 'MainFrame.TFrame')
        self.main_frame.grid(column = 0, row = 0, sticky = ('n','s','e','w'))
        # self.main_frame.grid_columnconfigure(1, weight = 1, uniform = 'john')

        self.header_style = ttk.Style()
        self.header_style.configure('Header.TLabel', background = 'slategray3', relief = 'groove', anchor = 'center', padding = (2,2,2,2))
        load = Image.open('/home/johnny/Desktop/cookbook_logo.png')
        render = ImageTk.PhotoImage(load)
        self.header = ttk.Label(self.main_frame, image = render, style = 'Header.TLabel')
        self.header.grid(column = 0, row = 0, columnspan = 26, ipadx = 10, ipady = 5, sticky = ('n','s','e','w'))
        self.header_img = render
############## For the button menu ###############################
        # Make letter menu
        self.button_style = ttk.Style()
        self.button_style.configure('MY_Button.TButton', width = 3, padding = (2,2,2,2), background = 'skyblue') ## <------ I can set width to 8 and all buttons are even but it expand to the whole window. I'm wanting it to do that only when window is resized
        letters = string.ascii_uppercase
        i=0
        for letter in letters:
            self.button = ttk.Button(self.main_frame, text = letter, style = 'MY_Button.TButton')
            self.button.grid(column = i, row = 1, sticky = ('n','s','e','w'))
            i += 1

###########################################################################################

        self.left_label_style = ttk.Style()
        self.left_label_style.configure('Left.TLabel', background = 'slategray3', relief = 'groove', padding = (8,8,8,8))
        self.left_label = ttk.Label(self.main_frame, text = 'Just some text on the left', style = 'Left.TLabel')
        self.left_label.grid(columnspan = 8, column = 0, row = 2, sticky = ('n','s','e','w'))

        self.right_label_style = ttk.Style()
        self.right_label_style.configure('Right.TLabel', background = 'slategray3', relief = 'groove', padding = (8,8,8,8))
        self.right_label = ttk.Label(self.main_frame, text = 'Just some text on the right', style = 'Right.TLabel')
        self.right_label.grid(columnspan = 18, column = 8, row = 2, sticky = ('n','s','e','w'))

        # Resize config
        self.master.columnconfigure(0, weight = 1)
        self.master.rowconfigure(0, weight = 1)
        self.main_frame.columnconfigure(0, weight = 3)
        self.left_label.columnconfigure(0, weight = 3)
        self.right_label.columnconfigure(0, weight = 3)
        self.button.rowconfigure(1, weight = 3) # I've even did a loop here to cover all columns and still no success




def main():
    root = tk.Tk()
    root.title("Johnny's CookBook")
    root.configure(borderwidth = 5, highlightcolor = 'slategray', highlightbackground = 'slategray', highlightthickness = 4)
    window = MainWindow(root)
    root.mainloop()

if __name__ == '__main__':
    main()

Sorry. I should have posted in the GUI section.

I got it to work using this in the parent
for i in range(26):
            self.main_frame.grid_columnconfigure(i, weight = 3, uniform = 'john')
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags


Reply
#2
The lack of a simple to use geometry is the reason I never use tkinter any more except for very simple applications.
However this is one of the best tutorials on the subject: https://www.python-course.eu/tkinter_lay...gement.php
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020