0

I am just trying to make the green frame fill the remaining empty space of a window, but I can only get it to fill the bottom half no matter what I do.

Screenshot

Here is my code:

from tkinter import *

class CredsWindow:

    def __init__(self, root):

        root.title("Greenbox")
        root.geometry("300x200")
        root.attributes('-topmost', True)

        self.drag_offsetx = IntVar()
        self.drag_offsety = IntVar()

        def drag_window_start(v):
            self.drag_offsetx = v.x
            self.drag_offsety = v.y

        def drag_window(v):
            x = root.winfo_pointerx()-self.drag_offsetx
            y = root.winfo_pointery()-self.drag_offsety
            root.geometry(f'+{x}+{y}')

        title_bar = Frame(root, bg="#252525")
        title_bar.pack(anchor=N, expand=True, fill=X)
        title_bar.bind("<Button-1>", drag_window_start)
        title_bar.bind("<B1-Motion>", drag_window)

        title_label = Label(title_bar, text="Greenbox", bg="#252525", fg="white")
        title_label.pack(side=LEFT, pady=3, padx=2)

        close_button = Button(title_bar, text="X", bg="#252525", fg="white", relief="flat", command=root.quit)
        close_button.pack(side=RIGHT, pady=3, padx=2)

        
        mainframe = Frame(root, bg='#171717')
        mainframe.pack(side=TOP, expand=True, fill=BOTH)


root = Tk()
CredsWindow(root)
root.mainloop()
  • Please clarify your specific problem or provide additional details to highlight exactly what you need. As it's currently written, it's hard to tell exactly what you're asking. – Community Jul 27 '23 at 17:22

1 Answers1

0

You need to remove expand=True in this statement:

title_bar.pack(anchor=N, expand=True, fill=X)

When you set it to True, you're telling pack to have it allocate extra space to that widget. You've also added expand=True when packing mainframe, which means that all unused space will be evenly distributed between title_bar and mainframe.

Bryan Oakley
  • 370,779
  • 53
  • 539
  • 685