954,515 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Tkinter & button placement problem

Hi. I'm creating an interface using the Tkinter library, but I seem to be having some issues with placing 3 buttons BELOW 3 buttons which are on top. All buttons should be inside the second LabelFrame. I've looked all over and I can't seem to figure out why the other buttons are not placing themselves below the top 3. I've tried various options using the pack method such as side = BOTTOM or anchor = SW, but they don't seem to be helping at all.

from Tkinter import *

class GUI():
    def __init__(self, r):
        self.r = r
        
        self.i = StringVar()
        
        self.f = Frame(self.r)
        self.f.pack(fill = BOTH)
        
        self.g = LabelFrame(self.f, text = 'Groupbox 1', height = 90, width = 150, font = 'Lucida 8')
        self.g.pack_propagate(0)
        self.g.pack(side = LEFT, pady = 10, padx = 10)
        
        self.id = Entry(self.g, justify = CENTER, textvariable = self.i, font = 'Lucida 8')
        self.id.pack(pady = 22)
        
        self.opt = LabelFrame(self.f, text = 'Groupbox 2', height = 90, width = 200, font = 'Lucida 8')
        self.opt.pack_propagate(0)
        self.opt.pack(side = LEFT)
        
        self.button1 = Button(self.opt, text = 'Button 1', height = 1, width = 7, font = 'Lucida 8')
        self.button1.pack(side = LEFT, anchor = N, pady = 5, padx = 4)
        
        self.button2 = Button(self.opt, text = 'Button 2', height = 1, width = 7, font = 'Lucida 8')
        self.button2.pack(side = LEFT, anchor = N, pady = 5, padx = 4)
    
        self.button3 = Button(self.opt, text = 'Button 3', height = 1, width = 7, font = 'Lucida 8')
        self.button3.pack(side = LEFT, anchor = N, pady = 5, padx = 4)
        
        
        self.button4 = Button(self.opt, text = 'Button 4', height = 1, width = 5, font = 'Lucida 8')
        self.button4.pack(side = BOTTOM, anchor = W)
        
        # Buttons 5 & 6 will be added, but I'd first like to rectify button 4's issue.

t = Tk()
t.title('test')
#t.configure(bg = 'white')
t.geometry('400x120')
t.pack_propagate(0)

GUI(t)
t.mainloop()


As stated, I've changed the options in the button4's pack method, but it doesn't seem to want to place itself directly beneath the other buttons. It's placing itself to the right. I'd like to stay away from the grid manager, as I've already gotten most of what I need in the right place.

I'd appreciate any help in this situation, and hopefully it wasn't a simple mistake on my part.

init
Newbie Poster
2 posts since Nov 2011
Reputation Points: 10
Solved Threads: 0
 

You either use the grid manager or a separate Frame for each set of 3 buttons.

from Tkinter import *
 
class GUI():
    def __init__(self, r):
        self.r = r
 
        self.i = StringVar()
 
        self.f = Frame(self.r)
        self.f.pack(fill = BOTH)
 
        self.g = LabelFrame(self.f, text = 'Groupbox 1', height = 90, width = 150, font = 'Lucida 8')
        self.g.pack_propagate(0)
        self.g.pack(side = LEFT, pady = 10, padx = 10)
 
        self.id = Entry(self.g, justify = CENTER, textvariable = self.i, font = 'Lucida 8')
        self.id.pack(pady = 22)
 
        self.opt = LabelFrame(self.f, text = 'Groupbox 2', height = 90, width = 200, font = 'Lucida 8')
        self.opt.pack_propagate(0)
        self.opt.pack(side = TOP)
 
        f1 = Frame(self.opt)
        for ctr in range(3):
            but = Button(f1, text = 'Button '+str(ctr+1), height=1, width=5, font='Lucida 8')
            but.pack(side = LEFT, anchor = N, pady = 5, padx = 4)
        f1.pack(side=TOP) 
 
 
        f2 = Frame(self.opt, height = 50, width = 200)
        for ctr in range(3):
            but = Button(f2, text = 'Button '+str(ctr+4), height=1, width=5, font='Lucida 8')
            but.pack(side = LEFT, anchor = N, pady = 5, padx = 4)
        f2.pack(side=BOTTOM)

t = Tk()
t.title('test')
#t.configure(bg = 'white')
t.geometry('400x120')
t.pack_propagate(0)
 
GUI(t)
t.mainloop()
woooee
Nearly a Posting Maven
2,454 posts since Dec 2006
Reputation Points: 777
Solved Threads: 714
 

That's exactly what I've been looking for actually. Thank you so much.

I feel somewhat idiotic for not thinking of that in the first place, but I'll keep it in mind about making another frame in future projects.

Thank you again. :3

init
Newbie Poster
2 posts since Nov 2011
Reputation Points: 10
Solved Threads: 0
 

Hello init

I just don't know why you don't work with .place() in place of .grid() , or .pack() , with .place( x= , y= ) , u can place where u want your objects in a window or a frame .. good luck .

Ismatus3
Junior Poster in Training
78 posts since Dec 2011
Reputation Points: 23
Solved Threads: 2
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You
View similar articles that have also been tagged: