From fbe86ddadcd39849e0f0e080b30eb810c5cd89ae Mon Sep 17 00:00:00 2001 From: Adam Makhlouf Date: Mon, 23 Dec 2019 11:18:32 +0100 Subject: [PATCH] Using loops Just a proposition to use loops to create the form. I think it applies quite well in this case and makes the code easier to follow for everyone! --- ...6-control-layout-with-geometry-managers.py | 131 ++++++------------ 1 file changed, 41 insertions(+), 90 deletions(-) diff --git a/ch17-graphical-user-interfaces/6-control-layout-with-geometry-managers.py b/ch17-graphical-user-interfaces/6-control-layout-with-geometry-managers.py index 339c992..85fe94b 100644 --- a/ch17-graphical-user-interfaces/6-control-layout-with-geometry-managers.py +++ b/ch17-graphical-user-interfaces/6-control-layout-with-geometry-managers.py @@ -1,97 +1,48 @@ -# 17.6 - Control Layout With Geometry Managers -# Review Exercise #2 - -# NOTE: The first exercise in this section is instructional and does -# not require a solution to be shown here. For this reason, only the -# solution to the second exercise is presented. - import tkinter as tk - -# Create a new window with the title "Address Entry Form" +# Creating a window with a title window = tk.Tk() window.title("Address Entry Form") -# Create a new frame `frm_form` to contain the Label -# and Entry widgets for entering address information. -frm_form = tk.Frame(relief=tk.SUNKEN, borderwidth=3) -# Pack the frame into the window -frm_form.pack() - -# Create the Label and Entry widgets for "First Name" -lbl_first_name = tk.Label(master=frm_form, text="First Name:") -ent_first_name = tk.Entry(master=frm_form, width=50) -# Use the grid geometry manager to place the Label and -# Entry widgets in the first and second columns of the -# first row of the grid -lbl_first_name.grid(row=0, column=0, sticky="e") -ent_first_name.grid(row=0, column=1) - -# Create the Label and Entry widgets for "Last Name" -lbl_last_name = tk.Label(master=frm_form, text="Last Name:") -ent_last_name = tk.Entry(master=frm_form, width=50) -# Place the widgets in the second row of the grid -lbl_last_name.grid(row=1, column=0, sticky="e") -ent_last_name.grid(row=1, column=1) - -# Create the Label and Entry widgets for "Address Line 1" -lbl_address1 = tk.Label(master=frm_form, text="Address Line 1:") -ent_address1 = tk.Entry(master=frm_form, width=50) -# Place the widgets in the third row of the grid -lbl_address1.grid(row=2, column=0, sticky="e") -ent_address1.grid(row=2, column=1) - -# Create the Label and Entry widgets for "Address Line 2" -lbl_address2 = tk.Label(master=frm_form, text="Address Line 2:") -ent_address2 = tk.Entry(master=frm_form, width=5) -# Place the widgets in the fourth row of the grid -lbl_address2.grid(row=3, column=0, sticky=tk.E) -ent_address2.grid(row=3, column=1) - -# Create the Label and Entry widgets for "City" -lbl_city = tk.Label(master=frm_form, text="City:") -ent_city = tk.Entry(master=frm_form, width=50) -# Place the widgets in the fifth row of the grid -lbl_city.grid(row=4, column=0, sticky=tk.E) -ent_city.grid(row=4, column=1) - -# Create the Label and Entry widgets for "State/Province" -lbl_state = tk.Label(master=frm_form, text="State/Province:") -ent_state = tk.Entry(master=frm_form, width=50) -# Place the widgets in the sixth row of the grid -lbl_state.grid(row=5, column=0, sticky=tk.E) -ent_state.grid(row=5, column=1) - -# Create the Label and Entry widgets for "Postal Code" -lbl_postal_code = tk.Label(master=frm_form, text="Postal Code:") -ent_postal_code = tk.Entry(master=frm_form, width=50) -# Place the widgets in the seventh row of the grid -lbl_postal_code.grid(row=6, column=0, sticky=tk.E) -ent_postal_code.grid(row=6, column=1) - -# Create the Label and Entry widgets for "Country" -lbl_country = tk.Label(master=frm_form, text="Country:") -ent_country = tk.Entry(master=frm_form, width=50) -# Place the widgets in the eight row of the grid -lbl_country.grid(row=7, column=0, sticky=tk.E) -ent_country.grid(row=7, column=1) - -# Create a new frame `frm_buttons` to contain the -# Submit and Clear buttons. This frame fills the -# whole window in the horizontal direction and has -# 5 pixels of horizontal and vertical padding. -frm_buttons = tk.Frame() -frm_buttons.pack(fill=tk.X, ipadx=5, ipady=5) - -# Create the "Submit" button and pack it to the -# right side of `frm_buttons` -btn_submit = tk.Button(master=frm_buttons, text="Submit") -btn_submit.pack(side=tk.RIGHT, padx=10, ipadx=10) - -# Create the "Clear" button and pack it to the -# right side of `frm_buttons` -btn_clear = tk.Button(master=frm_buttons, text="Clear") -btn_clear.pack(side=tk.RIGHT, ipadx=10) - +# List of fields we want to have in our form +fields = ["First Name:", + "Last Name:", + "Address Line1:", + "Address Line2:", + "City:", + "State/Province:", + "Postal Code:", + "Country:"] + +# The top frame contains the fields and their entry widgets +top_frame = tk.Frame(relief=tk.SUNKEN, master = window) +top_frame.pack() + +# We are going to use a 2 columns grid to place our widgets +# We initialise the current row variable of our grid +current_top_frame_row = 0 + +for field in fields: + # For each field we create a label and entry widget + label = tk.Label(text=field, master=top_frame) + entry = tk.Entry(width=50, master=top_frame) + # We place them in the current row of our grid + label.grid(row=current_top_frame_row, column=0, sticky=tk.E) + entry.grid(row=current_top_frame_row, column=1) + # We increment the current line for the next field + current_top_frame_row += 1 + +# Creating the bottom frame that contains +# the Submit & Clear buttons +bot_frame = tk.Frame(master=window) +bot_frame.pack(fill=tk.X, ipadx=5, ipady=5) +choices = ["Cancel", + "Submit"] + +for choice in choices: + # Create the button and pack it to the right side + button = tk.Button(text=choice, relief=tk.RAISED, master=bot_frame) + button.pack(side=tk.RIGHT, padx=5, ipadx=10) + # Start the application window.mainloop() pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy