'How to position several widgets side by side, on one line, with tkinter?

By default, after making a tkinter button, it automatically puts the next one on the other line.
How do I stop this from happening?
I want to do something like this:
enter image description here



Solution 1:[1]

You must use one of the geometry managers for that:

here with grid:

import tkinter as tk

root = tk.Tk()

b1 = tk.Button(root, text='b1')
b2 = tk.Button(root, text='b2')
b1.grid(column=0, row=0)   # grid dynamically divides the space in a grid
b2.grid(column=1, row=0)   # and arranges widgets accordingly
root.mainloop()

there using pack:

import tkinter as tk

root = tk.Tk()

b1 = tk.Button(root, text='b1')
b2 = tk.Button(root, text='b2')
b1.pack(side=tk.LEFT)      # pack starts packing widgets on the left 
b2.pack(side=tk.LEFT)      # and keeps packing them to the next place available on the left
root.mainloop()

The remaining geometry manager is place, but its use is sometimes complicated when resizing of the GUI occurs.

Solution 2:[2]

Simply use this to make the y coordinates the same and change the x coordinate:

from tkinter import * 
root = Tk()

Button(root, text='Submit', width=10, bg='blue', fg='white', 
command=database).place(x=70, y=130)

For the second button:

buttonSignIn = Button(root, text="Sign in", width=10, bg='black', 
fg='white', command=new_winF).place(x=30, y=130)

Solution 3:[3]

I had the same problem once, and found this: two "simple" ways to move widgets around a GUI area, are

i) Using the ".grid" attribute (see example below):

MyButton_FilePath = Button(
                           master  = gui,
                           text    = 'Open',
                           command = funcion_openfile_findpath,
                           fg      = 'Black', font = ('Arial bold',11)
                          )
MyButton_FilePath.grid(row = 0, column = 2, padx = 4, pady = 4)

ii) Or using the attribute ".place":

MyButton_FilePath = Button(
                           master  = gui,
                           text    = 'Open',
                           command = funcion_openfile_findpath,
                           fg      = 'Black', font = ('Arial bold',11)
                          )
MyButton_FilePath.place(x=300, y=400)

Note that I have separated the "Button" object into two lines - as it is considered to be a better practice whenever placing/gridding widgets...

Hope I have helped.

Try both ways and see which one fits better your wishes! :)

Cheers, Marcos Moro, PhD

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 hjpoe
Solution 3 MarcosMoro