How to align tkinter widgets if columnspan has been invoked

38 views Asked by At

In this tkinter app I want label_two to abut ent_text_one

It does this if the length of ent_text_two is less than or equal to the length of ent_text_one and label_two combined. But if it is greater, then label_two appears to be right aligned in column 2. How can I fix this?

import tkinter as tk
from tkinter import ttk

def main():
    # Create the app's main window and loop
    root = tk.Tk()
    root.geometry('500x400')
    root.title('Test gui')
    mainframe = _create_main_frame(root)
    mainframe.grid(column=0, row=0)
    root.mainloop()

def _create_main_frame(container):
    frame = ttk.Frame(container, padding=5)
    _create_gui_items(frame)
    return frame

def _create_gui_items(frame):
    lbl_test_one = ttk.Label(frame, text='Label one')
    lbl_test_one.grid(row=0, column=0, sticky=tk.E)

    str_value_one = tk.StringVar()
    ent_text_one = ttk.Entry(frame, width=10, textvariable=str_value_one)
    ent_text_one.grid(row=0, column=1, sticky=tk.W)

    lbl_test_two = ttk.Label(frame, text='Label two')
    lbl_test_two.grid(row=0, column=2, sticky=tk.E)

    lbl_test_three = ttk.Label(frame, text='Label three')
    lbl_test_three.grid(row=1, column=0, sticky=tk.W)

    str_value_two = tk.StringVar()
    ent_text_two = ttk.Entry(frame, width=25, textvariable=str_value_two)
    ent_text_two.grid(row=1, column=1, columnspan=2, sticky=tk.W)

if __name__ == '__main__':
    main()
0

There are 0 answers