Think about Tkinter Frames as boxes that will help you to organize other Tkinter widgets.
First, make sure that you can run this script on your system, and than we will analyze it:
from tkinter import *
import tkinter.messagebox as mb
import os
top_win = Tk()
top_win.geometry("800x800")
frm_1 = Frame(top_win, highlightbackground = "black", highlightthickness = 1)
frm_2 = Frame(top_win, highlightbackground = "black", highlightthickness = 1)
lab_name = Label(frm_1, text = "Name").grid(row = 0, column = 0)
lab_last_name = Label(frm_1, text = "LastName").grid(row = 1, column = 0)
ent_name = Entry(frm_1)
ent_name.grid(row = 0, column = 1)
ent_last_name = Entry(frm_1)
ent_last_name.grid(row = 1, column = 1)
but_1 = Button(frm_1, text = "Submit").grid(row = 3, column = 0)
lab_age = Label(frm_2, text = "Age").grid(row = 0, column = 0)
lab_pay = Label(frm_2, text = "Pay").grid(row = 1, column = 0)
ent_age = Entry(frm_2)
ent_age.grid(row = 0, column = 1)
ent_pay = Entry(frm_2)
ent_pay.grid(row = 1, column = 1)
but_2 = Button(frm_2, text = "Submit").grid(row = 3, column = 0)
frm_1.grid(row = 0, column = 0)
frm_2.grid(row = 0, column = 1)
top_win.mainloop()
Ok, to create Frame we must (as with other Tkinter widgets) place it into some window. In this case primary window will be top_win, with geometry 800 x 800.
To create a border around Frame we will say highlightthickness = 1, we can also set background color:
frm_1 = Frame(top_win, highlightbackground = "black", highlightthickness = 1)
frm_2 = Frame(top_win, highlightbackground = "black", highlightthickness = 1)
Then we will have Labels inside Frames:
lab_name = Label(frm_1, text = "Name").grid(row = 0, column = 0)
lab_last_name = Label(frm_1, text = "LastName").grid(row = 1, column = 0)
Having just labels is not enough, there's need for entry fields:
ent_name = Entry(frm_1)
ent_name.grid(row = 0, column = 1)
ent_last_name = Entry(frm_1)
ent_last_name.grid(row = 1, column = 1)
Submit button is also needed:
but_1 = Button(frm_1, text = "Submit").grid(row = 3, column = 0)
Now, what about Frame 2 where we will have another labels with corresponding fields:
lab_age = Label(frm_2, text = "Age").grid(row = 0, column = 0)
lab_pay = Label(frm_2, text = "Pay").grid(row = 1, column = 0)
And than entry fields for age and pay values:
ent_age = Entry(frm_2)
ent_age.grid(row = 0, column = 1)
ent_pay = Entry(frm_2)
ent_pay.grid(row = 1, column = 1)
Button in second frame will be positioned using grid values:
but_2 = Button(frm_2, text = "Submit").grid(row = 3, column = 0)
After all is done, there's time to position Frames using grid values:
frm_1.grid(row = 0, column = 0)
frm_2.grid(row = 0, column = 1)
Improved Tkinter Frame Script that will print data using Python Shell
First, make sure that you can run it:
from tkinter import *
import tkinter.messagebox as mb
import os
top_win = Tk()
top_win.geometry("800x800")
def sub_nl():
name = ent_name.get()
last_name = ent_last_name.get()
print("Name", name)
print("LastName", last_name)
print("-" * 79)
def sub_ap():
age = ent_age.get()
pay = ent_pay.get()
print("Age: ", age)
print("Pay: ", pay)
print("-" * 79)
frm_1 = Frame(top_win, highlightbackground = "black", highlightthickness = 1)
frm_2 = Frame(top_win, highlightbackground = "black", highlightthickness = 1)
lab_name = Label(frm_1, text = "Name").grid(row = 0, column = 0)
lab_last_name = Label(frm_1, text = "LastName").grid(row = 1, column = 0)
ent_name = Entry(frm_1)
ent_name.grid(row = 0, column = 1)
ent_last_name = Entry(frm_1)
ent_last_name.grid(row = 1, column = 1)
but_1 = Button(frm_1, text = "Submit", command = sub_nl).grid(row = 3, column = 0)
lab_age = Label(frm_2, text = "Age").grid(row = 0, column = 0)
lab_pay = Label(frm_2, text = "Pay").grid(row = 1, column = 0)
ent_age = Entry(frm_2)
ent_age.grid(row = 0, column = 1)
ent_pay = Entry(frm_2)
ent_pay.grid(row = 1, column = 1)
but_2 = Button(frm_2, text = "Submit", command = sub_ap).grid(row = 3, column = 0)
frm_1.grid(row = 0, column = 0)
frm_2.grid(row = 0, column = 1)
top_win.mainloop()
We will create function that will get data for a name and last name using get() method. After that function will just create simple Python Shell report:
def sub_nl():
name = ent_name.get()
last_name = ent_last_name.get()
print("Name", name)
print("LastName", last_name)
print("-" * 79)
Another function will grab and print users age and pay values:
def sub_ap():
age = ent_age.get()
pay = ent_pay.get()
print("Age: ", age)
print("Pay: ", pay)
print("-" * 79)
Now we will just upgrade a source for both buttons, connecting it with corresponding functions using "command = " option:
but_1 = Button(frm_1, text = "Submit", command = sub_nl).grid(row = 3, column = 0)
but_2 = Button(frm_2, text = "Submit", command = sub_ap).grid(row = 3, column = 0)
If you don't understand those scripts give you some time and work with just one button.
There's also corresponding YT tutorial: Tkinter - Frames Explained
No comments:
Post a Comment