Created
November 30, 2023 04:09
-
-
Save hdary85/c27a34c304ba3615e7cb66f1f9aec4b5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import tkinter as tk | |
from tkinter import simpledialog, messagebox | |
class NestedDictManager: | |
def __init__(self, root): | |
self.root = root | |
self.root.title("Nested Dictionary Manager") | |
self.data = { | |
'key1': 'value1', | |
'key2': { | |
'key3': 'value3', | |
'key4': 'value4' | |
}, | |
'key5': { | |
'key6': { | |
'key7': 'value7' | |
} | |
} | |
} | |
self.tree = tk.ttk.Treeview(self.root) | |
self.tree.pack(expand=tk.YES, fill=tk.BOTH) | |
self.tree["columns"] = ("value") | |
self.tree.column("#0", width=150, minwidth=25) | |
self.tree.column("value", width=150, minwidth=25) | |
self.tree.heading("#0", text="Key") | |
self.tree.heading("value", text="Value") | |
self.display_dict(self.data) | |
self.btn_frame = tk.Frame(self.root) | |
self.btn_frame.pack(pady=10) | |
self.update_btn = tk.Button(self.btn_frame, text="Update", command=self.update_key) | |
self.update_btn.pack(side=tk.LEFT, padx=5) | |
self.delete_btn = tk.Button(self.btn_frame, text="Delete", command=self.delete_key) | |
self.delete_btn.pack(side=tk.LEFT, padx=5) | |
self.rename_btn = tk.Button(self.btn_frame, text="Rename", command=self.rename_key) | |
self.rename_btn.pack(side=tk.LEFT, padx=5) | |
self.new_key_btn = tk.Button(self.btn_frame, text="New Key", command=self.add_new_key) | |
self.new_key_btn.pack(side=tk.LEFT, padx=5) | |
def display_dict(self, dictionary, parent=""): | |
for key, value in dictionary.items(): | |
if isinstance(value, dict): | |
item = self.tree.insert(parent, "end", text=key) | |
self.display_dict(value, parent=item) | |
else: | |
self.tree.insert(parent, "end", text=key, values=(value,)) | |
def update_key(self): | |
selected_item = self.tree.selection() | |
if not selected_item: | |
messagebox.showwarning("Warning", "Please select a key to update.") | |
return | |
key = self.tree.item(selected_item)["text"] | |
new_value = simpledialog.askstring("Update Value", f"Enter new value for '{key}':") | |
if new_value is not None: | |
self.tree.item(selected_item, values=(new_value,)) | |
def delete_key(self): | |
selected_item = self.tree.selection() | |
if not selected_item: | |
messagebox.showwarning("Warning", "Please select a key to delete.") | |
return | |
confirm = messagebox.askyesno("Confirm Deletion", "Are you sure you want to delete this key?") | |
if confirm: | |
self.tree.delete(selected_item) | |
def rename_key(self): | |
selected_item = self.tree.selection() | |
if not selected_item: | |
messagebox.showwarning("Warning", "Please select a key to rename.") | |
return | |
old_key = self.tree.item(selected_item)["text"] | |
new_key = simpledialog.askstring("Rename Key", f"Enter new name for '{old_key}':") | |
if new_key is not None: | |
children = self.tree.get_children(selected_item) | |
self.tree.item(selected_item, text=new_key) | |
for child in children: | |
self.tree.move(child, selected_item, "end") | |
def add_new_key(self): | |
selected_item = self.tree.selection() | |
if not selected_item: | |
messagebox.showwarning("Warning", "Please select a parent key to add a new key.") | |
return | |
parent_key = self.tree.item(selected_item)["text"] | |
new_key = simpledialog.askstring("New Key", f"Enter a new key for '{parent_key}':") | |
if new_key is not None: | |
self.tree.insert(selected_item, "end", text=new_key) | |
if __name__ == "__main__": | |
root = tk.Tk() | |
app = NestedDictManager(root) | |
root.mainloop() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment