0

i am trying to create a GUI for marksheet scorecard in which 5 subjects and their marks will be entered and name, regd id and roll no are also asked. on that basis sgpa is calculated. now for five subjects i had to write if elif ladder 5 times bcoz i couldn't use for loop for tkinter.entry type of variable. is there any other way i could optimise the code. if i enter 100 in marks, it is not accepting , if i enter marks in single digit some unwanted result are coming. please help.

import tkinter as tk

# creating a new tkinter window
master = tk.Tk()

# assigning a title
master.title("MARKSHEET")

# specifying geomtery for window size
master.geometry("500x300")

# declaring objects for entering data
s1 = tk.Entry(master)
s2 = tk.Entry(master)
s3 = tk.Entry(master)
s4 = tk.Entry(master)
s5 = tk.Entry(master)
s6 = tk.Entry(master)
s7 = tk.Entry(master)
s8 = tk.Entry(master)

# function to display the total subject
# credits total credits and SGPA according
# to grades entered
def display():
    # Varibale to store total marks
    tot = 0
    g = 's'+'4'
    print(type(s4))
    # 10*number of subject credits
    #for i in range(4,9):
    if s4.get() >= "90":
        tk.Label(master, text="40").grid(row=3, column=4)
        tot +=40
    elif s4.get() >= "80":
        tk.Label(master, text="36").grid(row=3, column=4)
        tot += 36
    elif s4.get() >= "70":
        tk.Label(master, text="32").grid(row=3, column=4)
        tot += 32
    elif s4.get() >= "60":
        tk.Label(master, text="28").grid(row=3, column=4)
        tot += 28
    elif s4.get() >= "50":
        tk.Label(master, text="24").grid(row=3, column=4)
        tot += 24
    else:
        tk.Label(master, text="0").grid(row=3, column=4)
        tot += 0

    # Similarly doing with other objects
    if s5.get() >= '90':
        tk.Label(master, text="40").grid(row=4, column=4)
        tot += 40
    elif s5.get() >= '80':
        tk.Label(master, text="36").grid(row=4, column=4)
        tot += 36
    elif s5.get() >= '70':
        tk.Label(master, text="32").grid(row=4, column=4)
        tot += 32
    elif s5.get() >= '60':
        tk.Label(master, text="28").grid(row=4, column=4)
        tot += 28
    elif s5.get() >= '50':
        tk.Label(master, text="28").grid(row=4, column=4)
        tot += 24
    else:
        tk.Label(master, text="0").grid(row=4, column=4)
        tot += 0

    if s6.get() >= '90':
        tk.Label(master, text="40").grid(row=5, column=4)
        tot += 40
    elif s6.get() >= '80':
        tk.Label(master, text="36").grid(row=5, column=4)
        tot += 36
    elif s6.get() >= '70':
        tk.Label(master, text="32").grid(row=5, column=4)
        tot += 32
    elif s6.get() >= '60':
        tk.Label(master, text="28").grid(row=5, column=4)
        tot += 28
    elif s6.get() >= '50':
        tk.Label(master, text="24").grid(row=5, column=4)
        tot += 24
    else:
        tk.Label(master, text="0").grid(row=5, column=4)
        tot += 0

    if s7.get() >= '90':
        tk.Label(master, text="40").grid(row=6, column=4)
        tot += 40
    elif s7.get() >= '80':
        tk.Label(master, text="36").grid(row=6, column=4)
        tot += 36
    elif s7.get() >= '70':
        tk.Label(master, text="32").grid(row=6, column=4)
        tot += 32
    elif s7.get() >= '60':
        tk.Label(master, text="28").grid(row=6, column=4)
        tot += 28
    elif s7.get() >= '50':
        tk.Label(master, text="24").grid(row=6, column=4)
        tot += 24
    else:
        tk.Label(master, text="0").grid(row=6, column=4)
        tot += 0

    if s8.get() >= '90':
        tk.Label(master, text="40").grid(row=7, column=4)
        tot += 40
    elif s8.get() >= '80':
        tk.Label(master, text="36").grid(row=7, column=4)
        tot += 36
    elif s8.get() >= '70':
        tk.Label(master, text="32").grid(row=7, column=4)
        tot += 32
    elif s8.get() >= '60':
        tk.Label(master, text="28").grid(row=7, column=4)
        tot += 28
    elif s8.get() >= '50':
        tk.Label(master, text="24").grid(row=7, column=4)
        tot += 24
    else:
        tk.Label(master, text="0").grid(row=7, column=4)
        tot += 0


# print(total)
# to display total credits
    tk.Label(master, text=str(tot)).grid(row=8, column=4)

# to display SGPA
    tk.Label(master, text=str(tot / 20)).grid(row=9, column=4)

# end of display function

# label to enter name
tk.Label(master, text="Name").grid(row=0, column=0)

# label for registration number
tk.Label(master, text="Reg.No").grid(row=0, column=3)

# label for roll Number
tk.Label(master, text="Roll.No").grid(row=1, column=0)

# labels for serial numbers
tk.Label(master, text="Sr.No").grid(row=2, column=0)
tk.Label(master, text="1").grid(row=3, column=0)
tk.Label(master, text="2").grid(row=4, column=0)
tk.Label(master, text="3").grid(row=5, column=0)
tk.Label(master, text="4").grid(row=6, column=0)
tk.Label(master, text="5").grid(row=7, column=0)

# labels for subject codes
tk.Label(master, text="Subject").grid(row=2, column=1)
tk.Label(master, text="PPS").grid(row=3, column=1)
tk.Label(master, text="MATH").grid(row=4, column=1)
tk.Label(master, text="CHEMISTRY").grid(row=5, column=1)
tk.Label(master, text="PHYSICS").grid(row=6, column=1)
tk.Label(master, text="MECHANICS").grid(row=7, column=1)

# label for grades
tk.Label(master, text="MARKS").grid(row=2, column=2)
s4.grid(row=3, column=2)
s5.grid(row=4, column=2)
s6.grid(row=5, column=2)
s7.grid(row=6, column=2)
s8.grid(row=7, column=2)

# labels for subject credits
tk.Label(master, text="Subject Credit").grid(row=2, column=3)
tk.Label(master, text="4").grid(row=3, column=3)
tk.Label(master, text="4").grid(row=4, column=3)
tk.Label(master, text="4").grid(row=5, column=3)
tk.Label(master, text="4").grid(row=6, column=3)
tk.Label(master, text="4").grid(row=7, column=3)

tk.Label(master, text="Credit obtained").grid(row=2, column=4)

# taking entries of name, reg, roll number respectively
s1 = tk.Entry(master)
s2 = tk.Entry(master)
s3 = tk.Entry(master)

# organizing them in the grid
s1.grid(row=0, column=1)
s2.grid(row=0, column=4)
s3.grid(row=1, column=1)

# button to display all the calculated credit scores and sgpa
button1 = tk.Button(master, text="submit", bg="green", command=display)
button1.grid(row=9, column=1)

tk.Label(master, text="Total credit").grid(row=8, column=3)
tk.Label(master, text="SGPA").grid(row=9, column=3)

master.mainloop()

this is the code please try and provide me with the changes that i can make. THANKS for the help

  • Check this link for OOP https://stackoverflow.com/questions/17466561/best-way-to-structure-a-tkinter-application – Thingamabobs Aug 07 '20 at 16:31
  • Also you could configure your already existing labels you dont need to create new on top of your empty. Just bound them to a variable and use the configure method. https://stackoverflow.com/a/17126015/13629335 – Thingamabobs Aug 07 '20 at 16:34
  • You also could create your labels in a loop and configure them by storing them in a list https://stackoverflow.com/questions/15801199/tkinter-addressing-label-widget-created-by-for-loop – Thingamabobs Aug 07 '20 at 16:35
  • Then you dont need to call the method of the entry.get() all over again. Just store them in a varible like check1 = entrey1.get() – Thingamabobs Aug 07 '20 at 16:37
  • If the code works and you're looking for advice on how to design it better, [codereview.se] is a better place to ask. But see https://codereview.meta.stackexchange.com/questions/5777/a-guide-to-code-review-for-stack-overflow-users for advice first. – Barmar Aug 07 '20 at 16:48
  • thanks for the tips and information – Ritik Kothari Aug 07 '20 at 17:17

0 Answers0