pack()
is better to keep all in one column or in one row.
You may need to use Frame
to keep radiobuttons
in one row, and keep this frame with other elements in one column.
import tkinter as tk # PEP8 `import *` is not preferred
root = tk.Tk()
root.title("Test App")
# Question 1 - best car brand # PEP8: one space after `#` (and two spaces before `#` if there is code before `#`)
v1 = tk.StringVar(root)
v1.set(None)
tk.Label(root, text="What is your favorite car barnd?").pack(pady=10, padx=10)
frame_1 = tk.Frame(root)
frame_1.pack()
tk.Radiobutton(frame_1, text='Mazda', value='Mazda', variable=v1).pack(side='left')
tk.Radiobutton(frame_1, text='BMW', value='BMW', variable=v1).pack(side='left')
tk.Radiobutton(frame_1, text='Ford', value='Ford', variable=v1).pack(side='left')
# Question 2 - best sports brand # PEP8: one space after `#` (and two spaces before `#` if there is code before `#`)
v2 = tk.StringVar(root) # you have to use other name for variable
v2.set(None)
tk.Label(root, text="What is your favorite sports barnd?").pack(pady=10, padx=10)
frame_2 = tk.Frame(root)
frame_2.pack(pady=(0,10)) # add pad only below
tk.Radiobutton(frame_2, text='Nike', value='Nike', variable=v2).pack(side='left')
tk.Radiobutton(frame_2, text='Adidas', value='Adidas', variable=v2).pack(side='left')
tk.Radiobutton(frame_2, text='Puma', value='Puma', variable=v2).pack(side='left')
root.mainloop()

PEP 8 -- Style Guide for Python Code
You don't need \n
in Label
. Better use pady
(or ipady1
) in pack()
Using r1 = Radiobutton(...).pack()
you assign None
to r1
because pack()
/grid()
/place()
always gives None
. You may skip r1 =
if you will no use r1
later. Or you have to do it in two steps r1 = Radiobutton(...)
and later r1.pack()
EDIT:
Eventually you could use grid()
with columnspan
for labels (to use 3 columns) but it looks little different because radiobuttons in the same column share width of cell. Besides when you use more radiobuttons then you have to change columnspan
. With Frame
you don't have to do this.
import tkinter as tk # PEP8 `import *` is not preferred
root = tk.Tk()
root.title("Test App")
# Question 1 - best car brand # PEP8: one space after `#` (and two spaces before `#` if there is code before `#`)
v1 = tk.StringVar(root)
v1.set(None)
tk.Label(root, text="What is your favorite car barnd?").grid(row=0, column=0, columnspan=3, pady=10, padx=10)
tk.Radiobutton(root, text='Mazda', value='Mazda', variable=v1).grid(row=1, column=0)
tk.Radiobutton(root, text='BMW', value='BMW', variable=v1).grid(row=1, column=1)
tk.Radiobutton(root, text='Ford', value='Ford', variable=v1).grid(row=1, column=2)
# Question 2 - best sports brand # PEP8: one space after `#` (and two spaces before `#` if there is code before `#`)
v2 = tk.StringVar(root) # you have to use other name for variable
v2.set(None)
tk.Label(root, text="What is your favorite sports barnd?").grid(row=2, column=0, columnspan=3, pady=10, padx=10)
tk.Radiobutton(root, text='Nike', value='Nike', variable=v2).grid(row=3, column=0)
tk.Radiobutton(root, text='Adidas', value='Adidas', variable=v2).grid(row=3, column=1)
tk.Radiobutton(root, text='Puma', value='Puma', variable=v2).grid(row=3, column=2)
root.mainloop()
