① Project introduction
This is a blog about developing a program that can meet the requirement of EE301
Further, I developed a calculator using Python language that can implement addition, subtraction, multiplication and division operations and can be opened directly locally with concrete views.
The address of downloading the program
Content of this blog
② Assignment Table
Information | Detail |
---|---|
Class Link | https://bbs.csdn.net/forums/ssynkqtd-04 |
Project requirement | https://bbs.csdn.net/topics/617332156 |
The Aim of This Assignment | Develop a visual calculator |
MU STU ID and FZU STU ID | 21124507(MU)/832101327(FZU) |
③PSP Table
PSP form
Personal Software Process Stages | Estimated Time(minutes) | Actual Time(minutes) |
---|---|---|
Planning | ||
• Estimate | 20 | 20 |
Development | ||
• Analysis | 15 | 15 |
• Design Spec | 15 | 10 |
• Design Review | 25 | 30 |
• Coding Standard | 15 | 15 |
• Design | 30 | 40 |
• Coding | 120 | 100 |
• Code Review | 30 | 20 |
• Test | 10 | 10 |
Reporting | ||
• Test Repor | 120 | 70 |
• Size Measurement | 5 | 5 |
• Postmortem & Process Improvement Plan | 15 | 15 |
Sum | 400 | 330 |
④Task objectives and realization ideas
④.1 Task objectives
1.Realize visual calculator, and have basic functions
2.Do not need other files, click to run, to achieve similar exe file functions
④.2 Realization ideas
Based on Python’s tkinter library development, first set the format and layout of specific visual buttons, and then set the respective functions of the buttons and the display of the result.
The buttons include number 0 to 9,noting that the button for the number 0 needs to cross columns; The sign buttons include screen-cleaning C, backward “←”, resulting-pushing =, addition +, subtraction -, multiplication X and division /.Note that = should cross lines.
⑤ Code Description
import tkinter as tk #引用tkinter库以进行GUI编辑
window = tk.Tk()
window.title("Your calculator")
window.geometry("270x250+100+100") #Create a 270x250+100+100, titled "Your calculator", which is defined as window in this program
window.attributes("-alpha", 0.85)
window["background"] = "pink"
#Set the background, color and transparency of the window
font1 = ("楷书", 17)
font2 = ("楷书", 15)
#Define two font formats that will be used later, a result line font font1 and a key font font2
res = tk.StringVar()
res.set("")
#Creates the variable res so that the final result row changes as the key is entered
label = tk.Label(window, textvariable=res, font=font1, height=2, bg="pink", width=22, justify=tk.LEFT, anchor=tk.SE).grid(row=1, column=1, columnspan=4)
#Initialize the result line, defined as label, its display value varies with res, font is font1, height is 2, width is 22
#And the background is the same as the window background; The results are displayed on the right; Placed in the first row, first column and across four columns
button_c = tk.Button(window, text="C", width=5, font=font2, relief=tk.FLAT, bg="white")
button_back = tk.Button(window, text="←", width=5, font=font2, relief=tk.FLAT, bg="white")
button_div = tk.Button(window, text="/", width=5, font=font2, relief=tk.FLAT, bg="white")
button_mul = tk.Button(window, text="X", width=5, font=font2, relief=tk.FLAT, bg="white")
button_c.grid(row=2, column=1, padx=3, pady=1)
button_back.grid(row=2, column=2, padx=3, pady=2)
button_div.grid(row=2, column=3, padx=3, pady=2)
button_mul.grid(row=2, column=4, padx=3, pady=2)
#Create the key in the first row of the calculator in the window
# From the left (row=2; column=1) To the right (row=2, column=4) are empty keys, delete keys, divide, and multiply
button_7=tk.Button(window,text="7", width=5,font=font2,relief=tk.FLAT,bg="orange")
button_8=tk.Button(window,text="8", width=5,font=font2,relief=tk.FLAT,bg="orange")
button_9=tk.Button(window,text="9", width=5,font=font2,relief=tk.FLAT,bg="orange")
button_min=tk.Button(window,text="-", width=5,font=font2,relief=tk.FLAT,bg="white")
button_7.grid(row=3,column=1,padx=3,pady=1)
button_8.grid(row=3,column=2,padx=3,pady=1)
button_9.grid(row=3,column=3,padx=3,pady=1)
button_min.grid(row=3,column=4,padx=3,pady=1)
#Create the keys in the second row of the calculator in the window, from the left (row=3; column=1) To the right (row=3, column=4) are the numbers 7, 8, 9, subtraction
button_4=tk.Button(window,text="4",width=5,font=font2,relief=tk.FLAT,bg="orange")
button_5=tk.Button(window,text="5",width=5,font=font2,relief=tk.FLAT,bg="orange")
button_6=tk.Button(window,text="6",width=5,font=font2,relief=tk.FLAT,bg="orange")
button_add=tk.Button(window,text="+",width=5,font=font2,relief=tk.FLAT,bg="white")
button_4.grid(row=4,column=1,padx=3,pady=1)
button_5.grid(row=4,column=2,padx=3,pady=1)
button_6.grid(row=4,column=3,padx=3,pady=1)
button_add.grid(row=4,column=4,padx=3,pady=1)
#Create the keys in the third row of the calculator in the window, from the left (row=4; column=1) To the right (row=4, column=4) are the numbers 4, 5, 6, and adding
button_1=tk.Button(window,text="1",width=5,font=font2,relief=tk.FLAT,bg="orange")
button_2=tk.Button(window,text="2",width=5,font=font2,relief=tk.FLAT,bg="orange")
button_3=tk.Button(window,text="3",width=5,font=font2,relief=tk.FLAT,bg="orange")
button_equ=tk.Button(window,text="=",height=3,width=5,font=font2,relief=tk.FLAT,bg="white")
button_1.grid(row=5,column=1,padx=3,pady=1)
button_2.grid(row=5,column=2,padx=3,pady=1)
button_3.grid(row=5,column=3,padx=3,pady=1)
button_equ.grid(row=5,column=4,padx=3,pady=1,rowspan=2)
#Create the keys in the fourth row of the calculator in the window, from the left (row=5; column=1) To the right (row=5, column=4) are the numbers 1, 2, 3, and the end operation (=), where the end operation key spans two rows
button_0=tk.Button(window,text="0",width=12,font=font2,relief=tk.FLAT,bg="orange")
button_dot=tk.Button(window,text=".",width=5,font=font2,relief=tk.FLAT,bg="orange")
button_0.grid(row=6,column=1,padx=3,pady=1,columnspan=2)
button_dot.grid(row=6,column=3,padx=3,pady=1)
#Create the keys in the fifth row of the calculator in the window, from the left (row=6; column=1)
#To the right (row=6, column=3) is the number 0, the decimal point, where the number 0 spans two columns
def buttonclick(x):
res.set(res.get()+x)
# Define a display function so that the number or operation entered in the result line can be displayed continuously
def calculation():
opt_str = res.get()
tmp = eval(opt_str)
res.set(str(tmp))
# Define the evaluation function, after pressing the end operation key, the eval function will evaluate the previously entered data and display the result
def clear():
res.set("")
# Define a clear function to clear the resulting row when the clear key is pressed
def back():
a=res.get()
res.set(a[0:-1])
# Define the Delete key, after pressing the delete key, remove the first number or symbol from right to left, and display the remaining characters
button_1.config(command=lambda: buttonclick("1"))
button_2.config(command=lambda: buttonclick("2"))
button_3.config(command=lambda: buttonclick("3"))
button_4.config(command=lambda: buttonclick("4"))
button_5.config(command=lambda: buttonclick("5"))
button_6.config(command=lambda: buttonclick("6"))
button_7.config(command=lambda: buttonclick("7"))
button_8.config(command=lambda: buttonclick("8"))
button_9.config(command=lambda: buttonclick("9"))
button_0.config(command=lambda: buttonclick("0"))
button_add.config(command=lambda: buttonclick("+"))
button_min.config(command=lambda: buttonclick("-"))
button_mul.config(command=lambda: buttonclick("*"))
button_div.config(command=lambda: buttonclick("/"))
button_dot.config(command=lambda: buttonclick("."))
button_equ.config(command=lambda: calculation())
button_c.config(command=lambda: clear())
button_back.config(command=lambda: back())
# Bind the corresponding key to the corresponding function function to determine the function achieved after pressing the key
window.mainloop()
I’ve written all the comments about the implementation directly into the code, so I think that should be clear enough
⑥ Specific demonstration
⑦ Summary and possible future improvements
⑦.1 Summary
In this project, some of the features are implemented that I didn’t know before, such as python’s tkinter library. I spent a lot of time searching for relevant information on the Internet (this part of time I calculated into coding). If I still want to use python to develop some small programs similar to calculators in the future, I should have a further understanding of such functional libraries with great practical significance as tkinter, and enhance the search ability to reduce the search time for unknown knowledge
⑦.2 Future improvements
1.Add trigonometric functions
2.Realize online, do not need to download to the local to run
In the last
Thanks for reading my first blog using markdown style, it is quite difficult to use at first. I am trying to adapt using it, so maybe there are some mistakes, hoping you can forget it. XD
I swear I will learn more about it later.