Here is something I been playing around with.
#! /usr/bin/env python3.8
'''Docstring'''
import tkinter as tk
from functools import partial
class CheckBoxes:
'''Docstring'''
def __init__(self, master):
self.master = master
self.master.columnconfigure(0, weight=1)
self.mainframe = tk.Frame(self.master)
self.mainframe.grid(column=0, row=0, sticky='news')
self.mainframe.grid_columnconfigure(0, weight=3)
self.chkbox_frame = tk.Frame(self.mainframe, border=5, relief='ridge')
self.chkbox_frame.grid(column=0, row=0, sticky='new')
self.textframe = tk.Frame(self.mainframe, border=5, relief='ridge', height=73)
self.textframe.grid(column=0, row=1, sticky='new')
self.btnframe = tk.Frame(self.mainframe, border=5, relief='ridge')
self.btnframe.grid(column=0, row=2, sticky='new')
self.myvars = []
self.chkboxes()
self.btnbox()
def chkboxes(self):
self.boxes = ['Checkbox 1', 'Checkbox 2', 'Checkbox 3']
i = 0
for self.box in self.boxes:
myvar = tk.StringVar()
self.chkbox = tk.Checkbutton(self.chkbox_frame, text=self.box, variable=myvar, onvalue='Checked', offvalue='Un-Checked')
self.chkbox.deselect()
self.chkbox.grid(column=0, row=i)
i += 1
self.myvars.append(myvar)
def print_frame(self, myvars):
self.textframe.destroy()
self.textframe = tk.Frame(self.mainframe, border=5, relief='ridge', height=73)
self.textframe.grid(column=0, row=1, sticky='new')
i = 0
for myvar in myvars:
label = tk.Label(self.textframe, text=f'{self.boxes[i]} -> {myvar.get()}')
label.grid(column=0, row=i, sticky='w')
i += 1
def btnbox(self):
self.button = tk.Button(self.btnframe, text='Click Me', \
command=partial(self.print_frame, self.myvars))
self.button.grid(column=0, row=0)
self.myvars=''
self.clear_btn = tk.Button(self.btnframe, text='Clear', \
command=partial(self.print_frame, self.myvars))
self.clear_btn.grid(column=1, row=0, padx=20)
def main():
root = tk.Tk()
root.title('Checkboxes')
root.geometry('400x200+50+50')
CheckBoxes(root)
root.mainloop()
if __name__ == '__main__':
main()