Jul-12-2020, 03:02 AM
Thanks for the response.
Setting the columns as uniform for both frames seems to fix the header alignment problem.
However, when I added a scrollbar to the second frame, the header alignment problem came back.
Also, the last column disappeared.
This probably has something to do with the canvas.
Any ideas on how to fix this would be appreciated.
Below is the code.
Thanks in advance.
Setting the columns as uniform for both frames seems to fix the header alignment problem.
However, when I added a scrollbar to the second frame, the header alignment problem came back.
Also, the last column disappeared.
This probably has something to do with the canvas.
Any ideas on how to fix this would be appreciated.
Below is the code.
Thanks in advance.
from tkinter import * from tkinter import ttk from pathlib import Path def data_table(frame,col_widths): # Create and populate values array for i in range(0,max_rows): values.append([]) j = 0 values[i].append(StringVar()) cb = ttk.Combobox(frame,width=col_widths[j],textvariable=values[i][j]) cb.grid(row=i, column= j) j += 1 values[i].append(StringVar()) ent = Entry(frame,width=col_widths[j],textvariable=values[i][j]) ent.grid(row=i, column= j) j += 1 values[i].append(StringVar()) ent = Entry(frame,width=col_widths[j],textvariable=values[i][j]) ent.grid(row=i, column= j) j += 1 values[i].append(BooleanVar()) # readonly cb = ttk.Checkbutton(frame,width=col_widths[j],onvalue=1,offvalue=0,variable=values[i][j]) cb.grid(row=i, column= j) j += 1 values[i].append(BooleanVar()) # Copy cb = ttk.Checkbutton(frame,width=col_widths[j],onvalue=1,offvalue=0,variable=values[i][j]) cb.grid(row=i, column= j) j += 1 values[i].append(BooleanVar()) # mandatory cb = ttk.Checkbutton(frame,width=col_widths[j],onvalue=1,offvalue=0,variable=values[i][j]) cb.grid(row=i, column= j) j += 1 values[i].append(StringVar()) # sort order ent = Entry(frame,width=col_widths[j],textvariable=values[i][j]) ent.grid(row=i, column= j) j += 1 values[i].append(BooleanVar()) # removed cb = ttk.Checkbutton(frame,width=col_widths[j],onvalue=1,offvalue=0,variable=values[i][j]) cb.grid(row=i, column= j) def myfunction(event): canvas.configure(scrollregion=canvas.bbox("all"),width=1000,height=350) current_file = Path(__file__).stem root = Tk() root.geometry('1000x500+200+150') root.title(current_file) root.columnconfigure(0, weight=1) root.rowconfigure(0, weight=1) mainframe = Frame(root) mainframe.grid(column=0, row=0, sticky='new') mainframe.grid_columnconfigure(0, weight=3) headers = ["Field Name","Field Label","Default Value","ReadOnly","Copy","Mandatory","Sort Order","Remove"] col_widths = [20,20,20,8,8,8,10,6] frame1 = Frame(mainframe) frame1.grid(column=0, row=0, sticky='new') for i in range(8): frame1.grid_columnconfigure(i, weight=3, uniform='columns') for i in range(8): header = Label(frame1, text=headers[i]) header['relief'] = 'raised' header['borderwidth'] = 1 header['highlightthickness'] = 1 header['highlightbackground'] = 'grey65' header.grid(column=i, row=0, sticky='ew') frame2 = Frame(mainframe) frame2.grid(column=0, row=1, sticky='new') """ for i in range(8): frame2.columnconfigure(i, weight=3, uniform='table') values = [] max_rows = 40 data_table(frame2,col_widths) """ canvas=Canvas(frame2) frame=Frame(canvas) myscrollbar=Scrollbar(frame2,orient="vertical",command=canvas.yview) canvas.configure(yscrollcommand=myscrollbar.set) myscrollbar.pack(side="right",fill="y") canvas.pack(side="left") canvas.create_window((0,0),window=frame,anchor='nw') frame.bind("<Configure>",myfunction) for i in range(8): frame.columnconfigure(i, weight=3, uniform='table') values = [] max_rows = 40 data_table(frame,col_widths) root.mainloop()