Я пытаюсь создать программу обмена сообщениями, используя tkinter в качестве интерфейса gui. Слева от gui есть холст с цифрами 1 - 100. Существует также полоса прокрутки на стороне холста, чтобы прокрутить эти цифры.
Проблема в том, что холст не заполняет все доступное пространство и по какой-то причине ограничивается маленькой рамкой.
Код:
from tkinter import *
# *** Scrollable Frame Class ***
class VerticalScrolledFrame(Frame):
def __init__(self, parent, *args, **kw):
Frame.__init__(self, parent, *args, **kw)
vscrollbar = Scrollbar(self, orient=VERTICAL)
vscrollbar.pack(fill=Y, side=LEFT, expand=FALSE)
canvas = Canvas(self, bd=0, highlightthickness=0, yscrollcommand=vscrollbar.set, bg="black")
canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
vscrollbar.config(command=canvas.yview)
canvas.xview_moveto(0)
canvas.yview_moveto(0)
self.interior = interior = Frame(canvas)
interior_id = canvas.create_window(0, 0, window=interior,
anchor=NW)
def _on_mousewheel(event):
canvas.yview_scroll(int(-1 * (event.delta / 120)), "units")
self.interior.bind_all("<MouseWheel>", _on_mousewheel)
canvas.bind_all("<MouseWheel>", _on_mousewheel)
def _configure_interior(event):
size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
canvas.config(scrollregion="0 0 %s %s" % size)
if interior.winfo_reqwidth() != canvas.winfo_width():
canvas.config(width=interior.winfo_reqwidth())
interior.bind('<Configure>', _configure_interior)
def _configure_canvas(event):
if interior.winfo_reqwidth() != canvas.winfo_width():
canvas.itemconfigure(interior_id, width=canvas.winfo_width())
canvas.bind('<Configure>', _configure_canvas)
# *** Create Window ***
root = Tk()
root.geometry("800x545")
root.config(bg="#23272A")
#root.resizable(False, False)
root.title("Secure Message")
# *** Set Friends Frame ***
friends_frame = VerticalScrolledFrame(root)
friends_frame.pack(side=LEFT)
for i in range(100):
friend_frames = []
friend_frame = Frame(friends_frame.interior, width=100)
friend_frames.append(friend_frame)
friend_frames[-1].pack()
text = Label(friend_frame, text=i)
text.pack(side=LEFT)
chatSpace_frame = Frame(root)
chatSpace_frame.pack(side=RIGHT)
# *** GUI ***
chatSpace = Listbox(chatSpace_frame, bg="#2C2F33", fg="white", width = 65, height=29)
chatSpace.grid(row=0, column=1, sticky=E, padx=10)
user_input = Entry(chatSpace_frame, highlightbackground="#2C2F33", bg="grey", width = 64, fg="white")
user_input.grid(row=1, column=1, sticky=E, pady=10, padx=9)
user_input.focus()
root.mainloop()
Извините, если это немного сложно понять. Любая помощь будет принята с благодарностью!
Снимки экрана
Этот холст с номерами слева нуждается заполнить все пустое серое пространство рядом с пространством чата.