I was interested in your code and it inspired me to do a modified version. Just wanted to share. It's by far not the best way but, it works.
#! /usr/bin/env python3 # Do the imports import pathlib import os import tkinter as tk from tkinter import ttk from functools import partial # The main class class MyClass: def __init__(self, parent): # Set the parent self.parent = parent self.parent.columnconfigure(0, weight=1) self.parent.rowconfigure(0, weight=1) # Container frame hold all other frames self.mainframe = tk.Frame(self.parent) self.mainframe.grid(column=0, row=0, sticky='new') self.mainframe.grid_columnconfigure(0, weight=3) # header frame self.label_frame = tk.Frame(self.mainframe) self.label_frame.grid(column=0, row=0, sticky='new') self.label_frame.grid_columnconfigure(0, weight=3) # The header label self.label = tk.Label(self.label_frame, anchor='n') self.label['text'] = 'Checkboxes' self.label['font'] = 'sans 16 bold' self.label['fg'] = 'blue' self.label.grid(column=0, row=0, sticky='new') self.label.grid_columnconfigure(0, weight=3) # The container frame for all the checkboxes self.checkbox_frame = tk.Frame(self.mainframe) self.checkbox_frame.grid(column=0, row=1, sticky='new') self.checkbox_frame.grid_columnconfigure(0, weight=3) # Initiate the files class for usage files = Files() file_path = GetPath().mypath() # Name of the settings file e.g. settings.txt file_name = 'settings.txt' # Create the file if it does not exist files.make_file(file_name) # This converts the settings.txt to integers for use in setting # the checkbox values to 0 or 1 defaults = files.convert(file_name) # Set file variable file = f'{file_path}/{file_name}' # Setup some variables # vars is used to create a list to store checkbox settings # for sending to the Files class for writing vars = [] # Used for setting rows and columns for checkboxes col_var = 0 row_var = 0 # Create the checkboxes for i in range(1,7): myvar = tk.IntVar() self.checkbox = ttk.Checkbutton(self.checkbox_frame) self.checkbox['text'] = f'Checkbox {i}' self.checkbox['variable'] = myvar # If there is not a defaults setting do nothing as we # have not saved any settings yet else we have some settings # go ahead and set the values if not defaults: pass else: myvar.set(defaults[i-1]) self.checkbox.grid(column=col_var, row=row_var, sticky='new') if col_var >= 2: col_var = 0 row_var += 1 else: col_var += 1 # Store checkbox settings in vars variable vars.append(myvar) # Setup the buttons self.btn_frame = tk.Frame(self.mainframe) self.btn_frame.grid(column=0, row=2, sticky='new', pady=10) self.btn_frame['relief'] = 'ridge' self.btn_frame['borderwidth'] = 1 self.btn_frame.grid_columnconfigure(0, weight=3) self.btn = tk.Button(self.btn_frame, text='Save', command=partial(files.save, file, vars)) self.btn.grid(column=0, row=0, sticky='w') self.btn = tk.Button(self.btn_frame, fg='red', text='Exit', command=os.sys.exit) self.btn.grid(column=1, row=0, sticky='e') # Class to get current path class GetPath: def mypath(self): return pathlib.Path(__file__).parent.absolute() # Class for creating, writing, saving, and converting settings file class Files: # File does not exist create or file exist pass def make_file(self, file): if not os.path.isfile(f'{GetPath().mypath()}/{file}'): open(f'{GetPath().mypath()}/{file}', 'w+') else: pass # Save the settings file def save(self, file, vars): try: myvars = [] for val in vars: myvars.append(val.get()) myf = open(file, 'w') myf.write(f'{myvars}') myf.close() except ValueError as error: print(error) # Convert the entries in the text file to integers to use in the Checkboxes # 0 for uncheck and 1 for checked. Set a variable list and return after conversion def convert(self, file): defaults = [] with open(f'{GetPath().mypath()}/{file}', 'r') as lines: line = lines.read().replace('[','').replace(']','').replace(',','') line = line.split() for default in line: defaults.append(int(default)) return defaults def main(): root = tk.Tk() root.title('Checkboxes') root.configure(borderwidth=3, relief='ridge', padx=10, pady=5) MyClass(root) root.mainloop() if __name__ == '__main__': main()
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags