This is my first GUI attempt with python using tkinter and I cannot figure out what is the problem:
here is my initial code:
from tkinter import *
root_app = Tk()
root_app.title("Test App")
#Question 1 - best car brand
v1 = StringVar()
v1.set(None)
Label(root_app, text="What is your favorite car barnd?\n", font=('Helvatical bold',16), fg='#ff0').pack()
r1 = Radiobutton(root_app, text='Mazda', value='Mazda', variable=v1).pack()
r2 = Radiobutton(root_app, text='BMW', value='BMW', variable=v1).pack()
r3 = Radiobutton(root_app, text='Ford', value='Ford', variable=v1).pack()
#Question 2 - best sports brand
v1 = StringVar()
v1.set(None)
Label(root_app, text="What is your favorite sports barnd?\n", font=('Helvatical bold',16), fg='#ff0').pack()
r1 = Radiobutton(root_app, text='Nike', value='Nike', variable=v1).pack()
r2 = Radiobutton(root_app, text='Adidas', value='Adidas', variable=v1).pack()
r3 = Radiobutton(root_app, text='Puma', value='Puma', variable=v1).pack()
root_app.mainloop()
It works but the radio buttons are shown vertically:
I tried to use side='left'
configuration for pack()
in my code:
r1 = Radiobutton(root_app, text='Mazda', value='Mazda', variable=v1).pack(side='left')
r2 = Radiobutton(root_app, text='BMW', value='BMW', variable=v1).pack(side='left')
r3 = Radiobutton(root_app, text='Ford', value='Ford', variable=v1).pack(side='left')
but I got a messy frame and cannot figure out how to fix it horizontally under each label:
CodePudding user response:
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()