Причиной вашей проблемы является то, что единицы ширины и высоты для списка отображаются в символах, поэтому вы настраиваете создание списка списка huuuuuuge, который охватывает все остальное под ним. Кроме того, указав геометрию root, вы устанавливаете размер окна * stati c, который недостаточно велик для размещения всех виджетов, которые вы в него поместили. Как правило, лучше просто позволить диспетчеру геометрии обрабатывать подходящие вещи.
Одним из способов будет использование столбцов, чтобы помочь немного, что-то вроде
chatbox.grid(row=0, column=0, columnspan=2, sticky=NSEW)
...
l1 = Label(root, text="Input:")
l1.grid(row=0, column=0, sticky=EW)
grid_column
...
raw_input.grid(row=1, column=1, sticky=EW)
root.columnconfigure(0, weight=0)
root.columnconfigure(1, weight=1)
root.rowconfigure(0, weight=1)
(Примечание: вы в вашем коде присваивается возврат grid () для l1. Это None, и, скорее всего, это вызовет у вас проблемы, вам нужно сначала назначить виджет.)
При изменении значения sticky на EW raw_input будет разверните, чтобы заполнить его ячейку, как и метка. Устанавливая веса для столбцов, они будут корректироваться в зависимости от размера окна, если пользователь его изменяет.
Вы также можете использовать пакет с другим фреймом для виджета ввода и метки. Это немного проще реализовать. Вот ваш код, настроенный для его использования.
from tkinter import *
import datetime
def send_message(event):
#this is a placeholder cuz without it it would give me an error
q = "hi"
#delete placeholder then your code here
# *** Initalize Window ***
root = Tk()
root.title("Secure MSG")
root.configure(background='grey')
# *** Connection Time Chat Box ***
chat_box = Listbox(root)
chat_box.insert(END, 'Connection: ' + str(datetime.datetime.now()))
chat_box.see('end')
chat_box.pack(side=TOP, fill=BOTH, expand=True)
# *** Input Box ***
tempFrame = Frame(root)
tempFrame.pack(side=TOP, fill=X)
l1 = Label(tempFrame, text="Input:", width=5)
l1.pack(fill=X)
raw_input = Entry(tempFrame)
raw_input.pack(fill=X, expand=True)
raw_input.focus()
raw_input.bind('<Return>', send_message)
# *** Run Mainloop ***
root.mainloop()
Это создаст окно, которое настраивается по мере того, как пользователь изменяет его размер.