Skip to content
Shop

CommunityJoin Our PatreonDonate

Sponsored Ads

Sponsored Ads

Tkinter

Showing a Window

It's easy to create a desktop application with Tkinter.

  1. Import tkinter
  2. Create a window instance,
  3. Set the title of the window,
  4. Run the window in a mainloop.
python
import tkinter
window = tkinter.Tk()
window.title = "My Special App"

# widgets are added here

window.mainloop()

Button Commands

python
import tkinter as tk
window = tk.Tk()
window.title('Counting Seconds')
button = tk.Button(window, text='Stop', width=25, command=window.destroy)
button.pack()
window.mainloop()

Draw on a Canvas

python
from tkinter import *
master = Tk()
w = Canvas(master, width=40, height=60)
w.pack()
canvas_height=20
canvas_width=200
y = int(canvas_height / 2)
w.create_line(0, y, canvas_width, y )
mainloop()

Check A Button

python
from tkinter import *
master = Tk()
var1 = IntVar()
Checkbutton(master, text='male', variable=var1).grid(row=0, sticky=W)
var2 = IntVar()
Checkbutton(master, text='female', variable=var2).grid(row=1, sticky=W)
mainloop()

Entering Text

You can enter text in an Entry field.

python
from tkinter import *
master = Tk()
Label(master, text='First Name').grid(row=0)
Label(master, text='Last Name').grid(row=1)
e1 = Entry(master)
e2 = Entry(master)
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
mainloop()

List Box

python
from tkinter import *
 
top = Tk()
Lb = Listbox(top)
Lb.insert(1, 'Python')
Lb.insert(2, 'Java')
Lb.insert(3, 'C++')
Lb.insert(4, 'Any other')
Lb.pack()
top.mainloop()
python
from tkinter import *
     
root = Tk()
menu = Menu(root)
root.config(menu=menu)
filemenu = Menu(menu)
menu.add_cascade(label='File', menu=filemenu)
filemenu.add_command(label='New')
filemenu.add_command(label='Open...')
filemenu.add_separator()
filemenu.add_command(label='Exit', command=root.quit)
helpmenu = Menu(menu)
menu.add_cascade(label='Help', menu=helpmenu)
helpmenu.add_command(label='About')
mainloop()

Text

python
from tkinter import *
root = Tk()
T = Text(root, height=2, width=30)
T.pack()
T.insert(END, 'GeeksforGeeks\nBEST WEBSITE\n')
mainloop()

Top Level

python
from tkinter import *
root = Tk()
root.title('GfG')
top = Toplevel()
top.title('Python')
top.mainloop()

Geometry

python
# Importing tkinter module
from tkinter import * 
from tkinter.ttk import *
 
# creating Tk window
master = Tk()
 
# setting geometry of tk window
master.geometry("200x200")
 
# button widget
b1 = Button(master, text = "Click me !")
b1.place(relx = 1, x =-2, y = 2, anchor = NE)
 
# label widget
l = Label(master, text = "I'm a Label")
l.place(anchor = NW)
 
# button widget
b2 = Button(master, text = "GFG")
b2.place(relx = 0.5, rely = 0.5, anchor = CENTER)
 
# infinite loop which is required to
# run tkinter program infinitely
# until an interrupt occurs
mainloop()

Grid

python
# import tkinter module
from tkinter import * 
from tkinter.ttk import *
 
# creating main tkinter window/toplevel
master = Tk()
 
# this will create a label widget
l1 = Label(master, text = "First:")
l2 = Label(master, text = "Second:")
 
# grid method to arrange labels in respective
# rows and columns as specified
l1.grid(row = 0, column = 0, sticky = W, pady = 2)
l2.grid(row = 1, column = 0, sticky = W, pady = 2)
 
# entry widgets, used to take entry from user
e1 = Entry(master)
e2 = Entry(master)
 
# this will arrange entry widgets
e1.grid(row = 0, column = 1, pady = 2)
e2.grid(row = 1, column = 1, pady = 2)
 
# infinite loop which can be terminated by keyboard
# or mouse interrupt
mainloop()

Pack

python
# Importing tkinter module
from tkinter import * from tkinter.ttk import *
 
# creating Tk window
master = Tk()
 
# creating a Fra, e which can expand according
# to the size of the window
pane = Frame(master)
pane.pack(fill = BOTH, expand = True)
 
# button widgets which can also expand and fill
# in the parent widget entirely
# Button 1
b1 = Button(pane, text = "Click me !")
b1.pack(fill = BOTH, expand = True)
 
# Button 2
b2 = Button(pane, text = "Click me too")
b2.pack(fill = BOTH, expand = True)
 
# Execute Tkinter
master.mainloop()

Functions

python
# Import all files from
# tkinter and overwrite
# all the tkinter files
# by tkinter.ttk
from tkinter import *
from tkinter.ttk import *
 
# creates tkinter window or root window
root = Tk()
root.geometry('200x100')
 
# function to be called when mouse enters in a frame
def enter(event):
    print('Button-2 pressed at x = % d, y = % d'%(event.x, event.y))
 
# function to be called when mouse exits the frame
def exit_(event):
    print('Button-3 pressed at x = % d, y = % d'%(event.x, event.y))
 
# frame with fixed geometry
frame1 = Frame(root, height = 100, width = 200)
 
# these lines are showing the
# working of bind function
# it is universal widget method
frame1.bind('<Enter>', enter)
frame1.bind('<Leave>', exit_)
 
frame1.pack()
 
mainloop()

Double CLick

python
from tkinter import *
   
def go(event): 
    cs = Lb.curselection() 
      
    # Updating label text to selected option 
    w.config(text=Lb.get(cs)) 
      
    # Setting Background Colour 
    for list in cs: 
          
        if list == 0: 
            top.configure(background='red') 
        elif list == 1: 
            top.configure(background='green') 
        elif list == 2: 
            top.configure(background='yellow') 
        elif list == 3: 
            top.configure(background='white') 
   
   
top = Tk() 
top.geometry('250x275') 
top.title('Double Click') 
   
# Creating Listbox 
Lb = Listbox(top, height=6) 
# Inserting items in Listbox 
Lb.insert(0, 'Red') 
Lb.insert(1, 'Green') 
Lb.insert(2, 'Yellow') 
Lb.insert(3, 'White') 
   
# Binding double click with left mouse 
# button with go function 
Lb.bind('<Double-1>', go) 
Lb.pack() 
   
# Creating Edit box to show selected option 
w = Label(top, text='Default') 
w.pack() 
top.mainloop()

Right Click

python
import tkinter 
from tkinter import *
  
root = Tk() 
  
L = Label(root, text ="Right-click to display menu", 
          width = 40, height = 20) 
L.pack() 
  
m = Menu(root, tearoff = 0) 
m.add_command(label ="Cut") 
m.add_command(label ="Copy") 
m.add_command(label ="Paste") 
m.add_command(label ="Reload") 
m.add_separator() 
m.add_command(label ="Rename") 
  
def do_popup(event): 
    try: 
        m.tk_popup(event.x_root, event.y_root) 
    finally: 
        m.grab_release() 
  
L.bind("<Button-3>", do_popup) 
  
mainloop()

Images

python
import tkinter 
from tkinter import *
  
root = Tk() 
  
L = Label(root, text ="Right-click to display menu", 
          width = 40, height = 20) 
L.pack() 
  
m = Menu(root, tearoff = 0) 
m.add_command(label ="Cut") 
m.add_command(label ="Copy") 
m.add_command(label ="Paste") 
m.add_command(label ="Reload") 
m.add_separator() 
m.add_command(label ="Rename") 
  
def do_popup(event): 
    try: 
        m.tk_popup(event.x_root, event.y_root) 
    finally: 
        m.grab_release() 
  
L.bind("<Button-3>", do_popup) 
  
mainloop()

CustomTKinter

CustomTkinter is an updated version of Tkinter that focuses on the look and feel of Tkinter, making the application look more modern.

python
pip3 install customtkinter
python
import customtkinter

customtkinter.set_appearance_mode("System")  # Modes: system (default), light, dark
customtkinter.set_default_color_theme("blue")  # Themes: blue (default), dark-blue, green

app = customtkinter.CTk()  # create CTk window like you do with the Tk window
app.geometry("400x240")

def button_function():
    print("button pressed")

# Use CTkButton instead of tkinter Button
button = customtkinter.CTkButton(master=app, text="CTkButton", command=button_function)
button.place(relx=0.5, rely=0.5, anchor=customtkinter.CENTER)

app.mainloop()
Advanced Example
python
import tkinter
import tkinter.messagebox
import customtkinter
from tkinter import ttk
from customtkinter import *
import os
import re
from PIL import Image, ImageTk
import random
# Modes: "System" (standard), "Dark", "Light"
customtkinter.set_appearance_mode("dark")
# Themes: "blue" (standard), "green", "dark-blue"
customtkinter.set_default_color_theme("green")

class App(customtkinter.CTk):
    def __init__(self):
        super().__init__()
        self.current_prompts = []

        # configure window
        self.title("Sample App")
        self.geometry(f"{1100}x{820}")

        # configure grid layout (4x4)
        self.grid_columnconfigure(1, weight=1)
        self.grid_columnconfigure((2, 3), weight=0)
        self.grid_rowconfigure((0, 1, 2), weight=1)

        # image_path = os.path.join(os.path.dirname(
        #     os.path.realpath(__file__)), "test_images")
        # self.logo_image = CTkImage(Image.open(
        #     os.path.join(image_path, "star.png")), size=(20, 20))
        # self.bg_image_label = customtkinter.CTkLabel(
        #     self, image=self.logo_image)

        # create sidebar frame with widgets
        self.sidebar_frame = CTkFrame(self, 
                                      width=140, 
                                      height=300, 
                                      corner_radius=0)
        self.sidebar_frame.grid(row=0, 
                                column=0, 
                                rowspan=4, 
                                sticky="nsew")
        self.sidebar_frame.grid_rowconfigure(4, weight=1)
        
        self.logo_label = CTkLabel(self.sidebar_frame, 
                                   text="Sample App", 
                                   font=CTkFont(size=20, weight="bold"))
        self.logo_label.grid(row=0, 
                             column=0, 
                             padx=20, 
                             pady=(20, 10))
        
        self.string_input_button_generate = CTkButton(
            self.sidebar_frame, text="Generate", command=self.generate_prompt)
        self.string_input_button_generate.grid(
            row=1, column=0, padx=20, pady=10)
        
        self.button_clear = CTkButton(
            self.sidebar_frame, text="Clear", command=self.clear_prompts)
        self.button_clear.grid(row=2, column=0, padx=20, pady=10)
        
        self.button_new_chat = CTkButton(
            self.sidebar_frame, command=self.sidebar_button_event, text="+ New chat")
        self.button_new_chat.grid(row=3, column=0, padx=20, pady=10)
        
        # self.button_marketing = CTkButton(self.sidebar_frame, 
        #                                   command=self.sidebar_button_event, 
        #                                   text="Specials", 
        #                                   image=self.logo_image)
        # self.button_marketing.grid(row=4, column=0, padx=20, pady=10)
        
        self.button_side_bar_disabled = CTkButton(self.sidebar_frame, command=self.sidebar_button_event)
        self.button_side_bar_disabled.grid(row=5, 
                                           column=0, 
                                           padx=20, 
                                           pady=10)
        
        self.appearance_mode_label = CTkLabel(
            self.sidebar_frame, text="Appearance Mode:", anchor="w")
        self.appearance_mode_label.grid(row=6, column=0, padx=20, pady=(10, 0))
        self.appearance_mode_optionemenu = CTkOptionMenu(self.sidebar_frame, 
                                                         values=["Light", "Dark", "System"],
                                                         command=self.change_appearance_mode_event)
        self.appearance_mode_optionemenu.grid(row=6, 
                                              column=0, 
                                              padx=20, 
                                              pady=(10, 10))
        
        self.scaling_label = CTkLabel(
            self.sidebar_frame, text="UI Scaling:", anchor="w")
        self.scaling_label.grid(row=7, column=0, padx=20, pady=(10, 0))
        self.scaling_optionemenu = CTkOptionMenu(self.sidebar_frame, 
                                                 values=["80%", "90%", "100%", "110%", "120%"],
                                                 command=self.change_scaling_event)
        self.scaling_optionemenu.grid(row=8, 
                                      column=0, 
                                      padx=20, 
                                      pady=(10, 20))

        # create main entry and button
        self.entry = CTkEntry(
            self, placeholder_text="Send a message")
        self.entry.grid(row=3, column=1, columnspan=2, padx=(
            20, 0), pady=(20, 20), sticky="nsew")

        self.main_button_1 = CTkButton(master=self, 
                                       fg_color="transparent", 
                                       text="Send", 
                                       border_width=2, 
                                       text_color=("gray10", "#DCE4EE"))
        self.main_button_1.grid(row=3, 
                                column=3, 
                                padx=(20, 20), 
                                pady=(20, 20), 
                                sticky="nsew")

        # create textbox
        self.textbox = CTkTextbox(self, 
                                  width=250, 
                                  font=CTkFont(size=20, weight="normal"))
        self.textbox.grid(row=0, 
                          column=1, 
                          padx=(20, 0), 
                          pady=(20, 0), 
                          sticky="nsew")
        
        self.textbox_prompts = CTkTextbox(self, 
                                          width=250, 
                                          font=CTkFont(size=16, weight="normal"))
        self.textbox_prompts.grid(row=2, 
                                  column=1, 
                                  padx=(20, 0), 
                                  pady=(20, 0), 
                                  sticky="nsew")
        with open("prompts.txt", 'a+', encoding='utf-8') as f:
            contents = f.read().splitlines()
            self.textbox_prompts.insert('0.0', contents)

        # self.textbox_2 = CTkTextbox(self, width=250)
        # self.textbox_2.grid(row=0, column=1, padx=(20, 0), pady=(90, 0), sticky="nsew")

        # create tabview
        self.tabview = CTkTabview(self, width=250)
        self.tabview.grid(row=0, column=2, padx=(
            20, 0), pady=(20, 0), sticky="nsew")
        self.tabview.add("Main")
        self.tabview.add("L&C")
        self.tabview.add("Action")
        self.tabview.tab("Main").grid_columnconfigure(
            0, weight=1)  # configure grid of individual tabs
        self.tabview.tab("L&C").grid_columnconfigure(0, weight=1)

        # option = StringVar(value="Select an option")
        # options = ["a", "b", "c"]
        self.menu_persona = CTkOptionMenu(self.tabview.tab("Main"), dynamic_resizing=False,
                                                        values=["Man", "Woman"])
        self.menu_persona.grid(row=0, column=0, padx=20, pady=(20, 10))
        
        self.label_media = CTkLabel(self.tabview.tab(
            "Main"), text="Media", anchor="w")
        self.label_media.grid(row=1, column=0, padx=20, pady=(10, 0))
        
        self.menu_media = CTkComboBox(self.tabview.tab(
            "Main"), values=['one'])
        self.menu_media.grid(row=2, column=0, padx=20, pady=(10, 10))
        self.label_media = CTkLabel(self.tabview.tab(
            "Main"), text="Location", anchor="w")
        self.label_media.grid(row=3, column=0, padx=20, pady=(10, 0))
        
        self.menu_location = CTkComboBox(self.tabview.tab(
            "Main"), values=['again'])
        self.menu_location.grid(row=4, column=0, padx=20, pady=(10, 10))

        self.string_input_button_generate = CTkButton(
            self.tabview.tab("Main"), text="Generate", command=self.generate_prompt)
        self.string_input_button_generate.grid(
            row=5, column=0, padx=20, pady=(10, 10))
        
        self.string_input_button = CTkButton(self.tabview.tab(
            "Main"), text="Open CTkInputDialog", command=self.open_input_dialog_event)
        self.string_input_button.grid(row=6, column=0, padx=20, pady=(10, 10))

        self.label_tab_2 = CTkLabel(self.tabview.tab("L&C"), text="CTkLabel on Tab 2")
        self.label_tab_2.grid(row=0, column=0, padx=20, pady=20)

        # create radiobutton frame
        self.radiobutton_frame = CTkFrame(self)
        self.radiobutton_frame.grid(row=0, column=3, padx=20, pady=(40, 10),sticky="nsew")

        # CHARACTER RADIOS
        self.radio_var = tkinter.StringVar(value='')
        # self.label_radio_group = CTkLabel(master=self.radiobutton_frame, text="Character Preset")
        # self.label_radio_group.grid(row=0, column=2, columnspan=1, padx=10, pady=10, sticky="")
        self.scrollable_frame_radios = CTkScrollableFrame(self.radiobutton_frame, label_text="Characters")
        self.scrollable_frame_radios.grid(row=1, column=1,sticky="nsew")
        # self.scrollable_frame_radios.grid_columnconfigure(0, weight=1)
        self.scrollable_frame_radios_switches = []
        switches = ['switch','switch2']
        for ndx,i in enumerate(switches):
            self.radio_button = CTkRadioButton(master=self.scrollable_frame_radios, text=i,variable=self.radio_var, value=i,command=lambda:self.radio_test(self.radio_var.get()))
            self.radio_button.grid(row=ndx, column=0, pady=10, padx=20, sticky="nsew")
            self.scrollable_frame_radios_switches.append(self.radio_button)
        # CHARACTER RADIOS

        # OBJECT RADIOS
        self.radio_var_2 = tkinter.IntVar(value=0)
        self.radios_objects = CTkScrollableFrame(self.radiobutton_frame, label_text="Objects")
        self.radios_objects.grid(row=1, column=2,sticky="nsew")
        # self.radios_objects.grid_columnconfigure(0, weight=1)
        self.radios_objects_switches = []
        switches = ['Modern House','Tree','Flower','Tablet','Burger','Bed']
        for ndx,i in enumerate(switches):
            self.radio_button = CTkRadioButton(master=self.radios_objects, text=i,variable=self.radio_var_2, value=ndx)
            self.radio_button.grid(row=ndx, column=0, pady=10, padx=20, sticky="nsew")
            self.radios_objects_switches.append(self.radio_button)
        # OBJECT RADIOS
        

        # CAR RADIOS
        self.radio_var_3 = tkinter.IntVar(value=0)
        self.radios_more_characters = CTkScrollableFrame(self.radiobutton_frame, label_text="Cars")
        self.radios_more_characters.grid(row=2, column=1,sticky="nsew")
        # self.radios_more_characters.grid_columnconfigure(0, weight=1)
        self.radios_more_characters_switches = []
        switches = ['Mercedes Benz','Honda','Hyundai','Toyota Sedan','Chevrolet Truck']
        for ndx,i in enumerate(switches):
            self.radio_button = CTkRadioButton(master=self.radios_more_characters, text=i,variable=self.radio_var_3, value=ndx)
            self.radio_button.grid(row=ndx, column=0, pady=10, padx=20, sticky="nsew")
            self.radios_more_characters_switches.append(self.radio_button)
        # CAR RADIOS

        # ANIMAL RADIOS
        self.radio_var_4 = tkinter.IntVar(value=0)
        self.radios_animals = CTkScrollableFrame(self.radiobutton_frame, label_text="Animals")
        self.radios_animals.grid(row=2, column=2,sticky="nsew")
        # self.radios_animals.grid_columnconfigure(0, weight=1)
        self.radios_animals_switches = []
        switches = ['Feline','Canine','Amphibians','Insects','Birds','Fish']
        for ndx,i in enumerate(switches):
            self.radio_button = CTkRadioButton(master=self.radios_animals, text=i,variable=self.radio_var_4, value=ndx)
            self.radio_button.grid(row=ndx, column=0, pady=10, padx=20, sticky="nsew")
            self.radios_animals_switches.append(self.radio_button)
        # ANIMAL RADIOS

        self.slider_progressbar_frame = CTkFrame(
            self, fg_color="transparent")
        self.slider_progressbar_frame.grid(row=1, 
                                           column=1, 
                                           padx=(20, 0), 
                                           pady=(20, 0), 
                                           sticky="nsew")
        self.slider_progressbar_frame.grid_columnconfigure(0, weight=1)
        self.slider_progressbar_frame.grid_rowconfigure(4, weight=1)

        self.seg_button_1 = CTkSegmentedButton(self.slider_progressbar_frame)
        self.seg_button_1.grid(row=0, column=0, padx=(
            20, 10), pady=(10, 10), sticky="ew")

        self.progressbar_1 = CTkProgressBar(self.slider_progressbar_frame)
        self.progressbar_1.grid(row=1, column=0, padx=(20, 10), pady=(10, 10), sticky="ew")
        self.progressbar_2 = CTkProgressBar(self.slider_progressbar_frame)
        self.progressbar_2.grid(row=2, column=0, padx=(20, 10), pady=(10, 10), sticky="ew")

        self.slider_1 = CTkSlider(self.slider_progressbar_frame, from_=0, to=1, number_of_steps=4)
        self.slider_1.grid(row=3, column=0, padx=(20, 10), pady=(10, 10), sticky="ew")
        self.slider_2 = CTkSlider(self.slider_progressbar_frame, orientation="vertical")
        self.slider_2.grid(row=0, column=1, rowspan=5, padx=(10, 10), pady=(10, 10), sticky="ns")

        self.progressbar_3 = CTkProgressBar(
            self.slider_progressbar_frame, orientation="vertical")
        self.progressbar_3.grid(row=0, 
                                column=2, 
                                rowspan=5, 
                                padx=(10, 20), 
                                pady=(10, 10), 
                                sticky="ns")
        # create scrollable frame
        self.scrollable_frame = CTkScrollableFrame(
            self, label_text="Settings")
        self.scrollable_frame.grid(row=1, column=2, padx=(
            20, 0), pady=(20, 0), sticky="nsew")
        self.scrollable_frame.grid_columnconfigure(0, weight=1)
        self.scrollable_frame_switches = []
        switches = ['Locations','Architecture','Artists','Animals','Automobiles','Buildings','Nature']
        for ndx,i in enumerate(switches):
            switch = CTkSwitch(
                master=self.scrollable_frame, text=f"{i}")
            switch.grid(row=ndx, column=0, padx=10, pady=(0, 20),sticky="nsew")
            self.scrollable_frame_switches.append(switch)

        # create checkbox and switch frame
        self.checkbox_slider_frame = CTkFrame(self)
        self.checkbox_slider_frame.grid(row=1, column=3, padx=(20, 20), pady=(20, 0), sticky="nsew")

        self.checkbox_1 = CTkCheckBox(
            master=self.checkbox_slider_frame, text="Kid Mode")
        self.checkbox_1.grid(row=1, column=0, pady=(
            20, 0), padx=20, sticky="nsew")
        self.checkbox_2 = CTkCheckBox(
            master=self.checkbox_slider_frame, text="Expert Mode")
        self.checkbox_2.grid(row=2, column=0, pady=(
            20, 0), padx=20, sticky="nsew")
        self.checkbox_3 = CTkCheckBox(
            master=self.checkbox_slider_frame, text="Debug")
        self.checkbox_3.grid(row=3, 
                             column=0, 
                             pady=20, 
                             padx=20, 
                             sticky="nsew")
        #IMAGE FRAME
        self.frame_images = CTkFrame(self)
        self.frame_images.grid(row=2, 
                               column=2, 
                               columnspan=2, 
                               padx=(20, 20), 
                               pady=(20, 0), 
                               sticky="nsew")
        # self.my_image = CTkImage(light_image=Image.open("./gallery/IMG_4159.png"),
        #                           dark_image=Image.open("./gallery/IMG_4159.png"),
        #                           size=(300, 300))
        # self.my_image.place(x=0,y=0)
        # button = CTkButton(master=self.frame_images,
        #                                  image = self.my_image,
        #                                  fg_color='black', 
        #                                  hover_color='black',
        #                                  text="",
        #                                  width=500,height=400,
        #                                  compound='left')
        # button.place(relx=0.5, rely=0.5, anchor=tkinter.CENTER)
        #IMAGE FRAME

        # set default values
        self.button_side_bar_disabled.configure(
            state="disabled", text="Disabled")
        self.checkbox_3.configure(state="disabled")
        self.checkbox_1.select()
        self.scrollable_frame_switches[0].select()
        self.scrollable_frame_switches[-1].select()
        # self.radio_button_3.configure(state="disabled")
        self.appearance_mode_optionemenu.set("Dark")
        # self.appearance_color_theme_optionemenu.set("green")
        self.scaling_optionemenu.set("100%")
        self.menu_persona.set("Woman")
        self.menu_media.set("Photo")
        self.menu_location.set("random")
        self.slider_1.configure(command=self.progressbar_2.set)
        self.slider_2.configure(command=self.progressbar_3.set)
        self.progressbar_1.configure(mode="indeterminnate")
        self.progressbar_1.start()
        self.textbox.insert(
            "0.0", """Welcome to Prompt Genius. Generate a prompt and be amazed!""")
        # self.textbox_2.insert("0.0",'asdfasdfasdf')
        self.seg_button_1.configure(
            values=["Recents", "Current", "All Prompts"])
        self.seg_button_1.set("Value 2")

        treestyle = ttk.Style()
        treestyle.theme_use('default')
        # treestyle.configure("Treeview", background=bg_color, foreground=text_color, fieldbackground=bg_color, borderwidth=0)
        # treestyle.map('Treeview', background=[('selected', bg_color)], foreground=[('selected', selected_color)])
        self.bind("<<TreeviewSelect>>", lambda event: self.focus_set())

        ##Treeview widget data
        treeview = ttk.Treeview(self, height=6, show="tree")
        treeview.grid(padx=10)
        treeview.insert('', '0', 'i1', text ='Categories')
        treeview.insert('', '1', 'i2', text ='Logins')
        treeview.insert('', '2', 'i3', text ='Identities')
        treeview.insert('i2', 'end', 'Frame', text ='Frame')
        treeview.insert('i2', 'end', 'Label', text ='Label')
        treeview.insert('i3', 'end', 'Treeview', text ='Treeview')
        # treeview.insert('', '3', 'i4', text ='Tags')
        treeview.move('i2', 'i1', 'end')
        treeview.move('i3', 'i1', 'end')

    def open_input_dialog_event(self):
        dialog = CTkInputDialog(
            text="Type in a number:", title="CTkInputDialog")
        print("CTkInputDialog:", dialog.get_input())
    
    def get_checked_items(self):
        return [checkbox.cget("text") for checkbox in self.scrollable_frame_radios_switches if checkbox.cget('value') == 1]

    def change_appearance_mode_event(self, new_appearance_mode: str):
        customtkinter.set_appearance_mode(new_appearance_mode)

    def change_theme_mode_event(self, new_theme_mode: str):
        customtkinter.set_default_color_theme(new_theme_mode)

    def change_scaling_event(self, new_scaling: str):
        new_scaling_float = int(new_scaling.replace("%", "")) / 100
        customtkinter.set_widget_scaling(new_scaling_float)

    def sidebar_button_event(self):
        print("Created new chat..")

    def generate_prompt(self, info='Welcme'):
        print("Generated prompt")
        self.textbox.delete(1.0, "end")
        self.textbox.insert("end", 'Generated')

    def clear_prompts(self, info='Welcme'):
        print("Celared prompt")
        self.textbox.delete(1.0, "end")


if __name__ == "__main__":
    app = App()
    app.mainloop()