How can you position the frames (and or elements inside the frames) such that the radio buttons at the bottom are shifted to the left outer edge of the GUI interface and the title is shifted to the center of the GUI interface?
GUI
JavaScript
x
51
51
1
import tkinter
2
3
root = tkinter.Tk()
4
root.title('Bookings')
5
root.geometry('700x500')
6
7
frame_title = tkinter.Frame(root)
8
frame_fields = tkinter.Frame(root)
9
frame_scan = tkinter.Frame(root)
10
frame_credentials = tkinter.Frame(root)
11
frame_site = tkinter.Frame(root)
12
frame_change = tkinter.Frame(root)
13
14
15
def passx():
16
pass
17
18
19
frame_title.grid(row=0, column=0, padx=(50, 0))
20
title = tkinter.Label(frame_title, text="Bookings Scan", font=("Helvetica", 24))
21
title.grid(pady=(27, 10))
22
frame_fields.grid(row=1, column=0, padx=(30, 0), pady=(10, 0))
23
start_date_lbl = tkinter.Label(frame_fields, text="Enter the start date: ", font=("Helvetica", 16))
24
start_date_lbl.grid(column=0, row=0, pady=15)
25
start_date_unp = tkinter.Entry(frame_fields, width=11, font=("Helvetica", 16))
26
start_date_unp.grid(column=1, row=0)
27
start_date = start_date_unp.get()
28
end_date_lbl = tkinter.Label(frame_fields, text="Enter the end date: ", font=("Helvetica", 16))
29
end_date_lbl.grid(column=0, row=1)
30
end_date_unp = tkinter.Entry(frame_fields, width=11, font=("Helvetica", 16))
31
end_date_unp.grid(column=1, row=1)
32
end_date = end_date_unp.get()
33
frame_scan.grid(row=1, column=1, padx=(45, 0))
34
scan_btn = tkinter.Button(frame_scan, text="Scan", command=passx, height=2, width=8, font=("Helvetica", 16))
35
scan_btn.grid(row=0, column=0, pady=(10, 0))
36
frame_credentials.grid(row=2, column=0)
37
credential = tkinter.IntVar(value=0)
38
tkinter.Radiobutton(frame_credentials, text='Username', variable=credential, value=1, font=("Helvetica", 16)).grid(column=1, row=4, sticky='W', pady=(43, 50))
39
tkinter.Radiobutton(frame_credentials, text='Password', variable=credential, value=2, font=("Helvetica", 16)).grid(column=1, row=5, sticky='W')
40
frame_site.grid(row=2, column=1, pady=(40, 0))
41
site = tkinter.IntVar(value=0)
42
tkinter.Radiobutton(frame_site, text='PearsonVUE', variable=site, value=1, font=("Helvetica", 16)).grid(column=0, row=0, sticky='W', pady=8)
43
tkinter.Radiobutton(frame_site, text='Kryterion', variable=site, value=2, font=("Helvetica", 16)).grid(column=0, row=1, sticky='W')
44
tkinter.Radiobutton(frame_site, text='PSI PAN', variable=site, value=3, font=("Helvetica", 16)).grid(column=0, row=2, sticky='W', pady=8)
45
tkinter.Radiobutton(frame_site, text='Scantron', variable=site, value=4, font=("Helvetica", 16)).grid(column=0, row=3, sticky='W')
46
tkinter.Radiobutton(frame_site, text='PSI Atlas', variable=site, value=5, font=("Helvetica", 16)).grid(column=0, row=4, sticky='W', pady=8)
47
frame_change.grid(row=2, column=2, padx=25, pady=(20, 0))
48
change_btn = tkinter.Button(frame_change, text="Change", command=passx, height=2, width=8, font=("Helvetica", 16))
49
change_btn.grid(column=3, row=3)
50
root.mainloop()
51
Advertisement
Answer
To achieve the goal:
- set
columnspan=3
inframe_title.grid(...)
- set
columnspan=2
inframe_fields.grid(...)
- move
frame_scan
to column 2
JavaScript
1
8
1
2
frame_title.grid(row=0, column=0, columnspan=3) ### added columnspan=3
3
4
frame_fields.grid(row=1, column=0, padx=(30, 0), pady=(10, 0), columnspan=2) ### added columnspan=2
5
6
frame_scan.grid(row=1, column=2, padx=(45, 0)) ### moved to column 2
7
8
The output: