Quantcast
Channel: Active questions tagged python - Stack Overflow
Viewing all articles
Browse latest Browse all 23160

How do I destroy frames and make it appear the way it was before in tkinter?

$
0
0

enter image description here

In the code below, I'm destroying frame1 and frame2, so that the messages can make use of the extra space after destroying frame1 and frame2.

The functionality I need is:

When a message is sent, frame1 and frame2 must get destroyed automatically.

The messages must make use of the extra space but the messages must be below new_note_button.

When new_note_button is clicked, I want all messages to be cleared and frame1, frame2 to appear how it was before.

I tried to recreate frame1 and frame2 when new_note_button is clicked but the frames are in different places and multiple frames are getting created (check the image I've attached).

Here's my code:

import tkinter as tkfrom tkinter import ttkframes_loaded = Truedef clear_chat_log():    global frames_loaded    if not frames_loaded:        # Create frames to group the boxes        frame1 = tk.Frame(root, bg="white")        frame1.pack(side=tk.TOP, padx=(0, 40), pady=(100, 1))        frame2 = tk.Frame(root, bg="white")        frame2.pack(side=tk.TOP, padx=(0, 40), pady=(5, 20))        style.configure("PDF.TButton", font=('Sans-serif', 12,), background="white", fg="black", highlightthickness=1, highlightbackground="gray", borderwidth=1)        chat_with_pdf_button = ttk.Button(frame1, text="Teyxxxxxxxxxxxx", style="PDF.TButton")        chat_with_pdf_button.pack(side=tk.LEFT, ipadx=(135), padx=(0, 10), ipady=14)        option2_label = tk.Label(frame1, text="testxxxxxxxxxxxxxxxxx", font=('Sans-serif', 12,), bg="white", fg="black", highlightthickness=1, highlightbackground="gray", padx=95, pady=20)        option2_label.pack(side=tk.LEFT)        # Create labels for the options in the second frame        option3_label = tk.Label(frame2, text="testzzzzzzzzzzzzzzzz", font=('Sans-serif', 12,), bg="white", fg="black", highlightthickness=1, highlightbackground="gray", padx=116, pady=20)        option3_label.pack(side=tk.LEFT, padx=(0, 10))        option4_label = tk.Label(frame2, text="testqqqqqqqqqqqqqqqqq", font=('Sans-serif', 12,), bg="white", fg="black", highlightthickness=1, highlightbackground="gray", padx=115, pady=20)        option4_label.pack(side=tk.LEFT)        frames_loaded = True        returnroot = tk.Tk()# Adjust the placement of other widgets accordinglyroot.title("Test")# Maximize the windowroot.attributes('-zoomed', True)style = ttk.Style()style.theme_use("clam")chat_frame = tk.Frame(root, bg="white")chat_frame.pack(expand=True, fill=tk.BOTH)chat_log = tk.Text(chat_frame, state='disabled', wrap='word', width=70, height=15, font=('Sans-serif', 12), bg="white", fg="black", highlightthickness=0, borderwidth=0)chat_log.pack(side=tk.LEFT, padx=(500,0), pady=10, expand = True, fill = tk.BOTH)# Create frames to group the boxesframe1 = tk.Frame(root, bg="white")frame1.pack(side=tk.TOP, padx=(0, 40), pady=(100, 1))frame2 = tk.Frame(root, bg="white")frame2.pack(side=tk.TOP, padx=(0, 40), pady=(5, 20))style.configure("PDF.TButton", font=('Sans-serif', 12,), background="white", fg="black", highlightthickness=1, highlightbackground="gray", borderwidth=1)chat_with_pdf_button = ttk.Button(frame1, text="Teyxxxxxxxxxxxx", style="PDF.TButton")chat_with_pdf_button.pack(side=tk.LEFT, ipadx=(135), padx=(0, 10), ipady=14)option2_label = tk.Label(frame1, text="testxxxxxxxxxxxxxxxxx", font=('Sans-serif', 12,), bg="white", fg="black", highlightthickness=1, highlightbackground="gray", padx=95, pady=20)option2_label.pack(side=tk.LEFT)# Create labels for the options in the second frameoption3_label = tk.Label(frame2, text="testzzzzzzzzzzzzzzzz", font=('Sans-serif', 12,), bg="white", fg="black", highlightthickness=1, highlightbackground="gray", padx=116, pady=20)option3_label.pack(side=tk.LEFT, padx=(0, 10))option4_label = tk.Label(frame2, text="testqqqqqqqqqqqqqqqqq", font=('Sans-serif', 12,), bg="white", fg="black", highlightthickness=1, highlightbackground="gray", padx=115, pady=20)option4_label.pack(side=tk.LEFT)def append_to_chat_log(sender=None, message=None):    chat_log.config(state=tk.NORMAL)    if sender:        chat_log.insert("end", f"{sender}\n\n", "sender")        #chat_log.insert("end",'\n\n')    if message:        chat_log.insert("end", message)    chat_log.tag_config("sender", font=('Arial', 12, 'bold'), foreground="black")    chat_log.config(state=tk.DISABLED)    chat_log.see("end")    chat_log.update()def send_message(event=None):    global frames_loaded    if frame1:        frame1.destroy()    if frame2:        frame2.destroy()    frames_loaded = False    message = message_entry.get(1.0, "end-1c")     message = message.strip()    message_entry.delete(1.0, tk.END)    message_entry.update()    if not message:        pass     else:        canvas1.place(x=495,y=80)        canvas1.update()        append_to_chat_log("User")        append_to_chat_log(message=message)        append_to_chat_log(message="\n")        canvas1.place_forget()        canvas1.update()new_note_button = ttk.Button(chat_frame, style="Toggle.TButton", text=" New Note", compound="left", command=clear_chat_log)new_note_button.place(x=490,y=40)canvas1 = tk.Canvas(root, width=250, height=70, bg="white", borderwidth=0, highlightthickness=0)# Display "Loading" textloading_text = canvas1.create_text(70, 50, text="Loading...", anchor="e")message_entry = tk.Text(root, padx=17, insertbackground='white', bg="white", fg="black", width=70, height=1, spacing1=20, spacing3=20, font=('Open Sans', 14))message_entry.pack(side=tk.LEFT, padx=(500, 0), pady=(0, 70))  # Adjust pady to move it slightly above the bottom#message_entry.insert(0, "Ask me anything...")message_entry.insert(1.0, "Type")message_entry.mark_set("insert", "%d.%d" % (0,0))message_entry.bind("<Return>", send_message)root.mainloop()

Viewing all articles
Browse latest Browse all 23160

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>