In the code I have, when a message is sent, frame1 and frame2 is destroyed. However, the messages do not make use of this extra space after destroying frame1 and frame2. Also, their is additional space at the top. I want the messages to make use of this extra pace at the top and bottom. I have indicated this additional space with arrows in the second image. Here's my code:
import tkinter as tk
from tkinter import ttk
frames_loaded = True
root = tk.Tk()
# Adjust the placement of other widgets accordingly
root.title("Test")
# Maximize the window
root.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)
# 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)
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()
canvas1 = tk.Canvas(root, width=250, height=70, bg="white", borderwidth=0, highlightthickness=0)
# Display "Loading" text
loading_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()
In the pack definition of the Text chat_log
object, change it to:
chat_log.pack(side=tk.LEFT, padx=(500,0), pady=10, expand = True, fill = tk.BOTH)
This fixed the issue for me, hopefully it does for you too