Python製作簡易計算器,附原始碼與註釋!
阿新 • • 發佈:2020-10-09
工具:python 3.6 pycharm編輯器
先簡單介紹一下使用的Tkinter圖形庫:
很多人學習python,不知道從何學起。
很多人學習python,掌握了基本語法過後,不知道在哪裡尋找案例上手。
很多已經做案例的人,卻不知道如何去學習更加高深的知識。
那麼針對這三類人,我給大家提供一個好的學習平臺,免費領取視訊教程,電子書籍,以及課程的原始碼!??¤
QQ群:961562169
- Tk是Python預設的工具集(即圖形庫),Tkinter是Tk的Python介面,通過Tkinter可以方便地呼叫Tk進行圖形介面開發。
- Tk與其他開發庫相比,不是最強大的,模組工具也不是非常的豐富。但它非常簡單,所提供的功能開發一般的應用也完全夠用了,且能在大部分平臺上執行。
- Python自帶的IDEL也是用Tkinter開發的。
- Tkinter的不足之處是缺少合適的視覺化介面設計工具,需要通過程式碼來完成視窗設計和元素佈局。
- Tkinter中提供了較為豐富的控制元件,完全能滿足基本的GUI程式的需求。
- 由於Tkinter模組已經在Python中內建,所以在使用之前,只需將其匯入即可。
- 兩種匯入方式為:
1.importtkinterastk—匯入tkinter,但沒引入任何元件,在使用時需要使用tk字首,如需要引入按鈕,則表示為:tk.Button。
2.fromtkinterimport*—將tkinter中的所有元件一次性引入。
好了,看程式碼吧
一. 匯入Tkinter模組,並建立一個頂層視窗
import math from tkinter import * root=Tk() root.title("計算器") ''' root.geometry("430x180") root.resizable(width=False, height=False) #可用於固定視窗大小 '''
二. 定義滑鼠事件(這裡是為了美化計算器啦,也可以不要)
def come(event): #當滑鼠光圈進入小部件時,部件背景顏色變為橙色 event.widget["background"]= "orange" def go(event): #當滑鼠光圈離開小部件時,部件背景顏色恢復 event.widget["background"] = "#%02x%02x%02x" % (240,240,240)#實現RGB和十六進位制的換算
三.定義輸入數字與符號函式
reset=True def bprint(event): global label global reset s=label['text'] num=event.widget['text'] if num in ['C','MC','MR','MS']: label['text']="0" return if num in "=": ##計算表示式 if s[-1]=="√": label['text']=math.sqrt(eval(s[:-1])) return if s[-1]=="%": label['text']=eval(s[:-1])*0.01 s=str(eval(s[:-1])*0.01) return if s[-1]=="x": label['text']=1/eval(s[:-3]) s=str(1/eval(s[:-3])) return else: label['text']=eval(label['text']) ###eval函式可以計算Python表示式,並返回結果 reset=True return if num in "Backspace": ####退格 label['text']=s[:-1] return if s=='0' or reset==True: s="" reset=False label['text']=s+num
四. 定義標準計算器按鍵框
def standard(): show=["MC","MR","MS","M+","M-","Backspace","CE","C","-","√",'7','8','9',"/","%",'4','5','6',"*","1/x",'1','2','3',"-","="] for i in range(5): for j in range(5): t=Button(root,text =show[5*i+j],width =10,height=1) t.grid(row=i+2,column =j,sticky =W,padx =1,pady=1) t.bind("<Enter>",come) t.bind("<Leave>",go) t.bind("<Button-1>",bprint) equal = Button(root,text="=",width =10,height =3) equal.grid(row=6,column =4,sticky =W,padx =1,pady=1,rowspan =2) equal.bind("<Enter>",come) equal.bind("<Leave>",go) equal.bind("<Button-1>",bprint) btn0 = Button(root,text ='0',width =22,height =1) btn0.grid(row=7,column =0,sticky =W,padx =1,pady=1,columnspan =2) #讓一個部件佔用多個行或列。columnspan指定列數,rowspan指定行數。 btn0.bind("<Enter>",come) btn0.bind("<Leave>",go) btn0.bind("<Button-1>",bprint) dot = Button(root,text =".",width =10,height =1) dot.grid(row=7,column =2,sticky =W,padx =1,pady=1) dot.bind("<Enter>",come) dot.bind("<Leave>",go) dot.bind("<Button-1>",bprint) add = Button(root,text ="+",width =10) add.grid(row=7,column =3,sticky =W,padx =1,pady=1) add.bind("<Enter>",come) add.bind("<Leave>",go) add.bind("<Button-1>",bprint)
五. 接下來是主函式
if __name__ == "__main__": #########################################選單設計 menubar = Menu(root) #建立下拉選單檢視 view_menu = Menu(menubar,tearoff = 0) #tearoff = 0表示選單不能移除視窗,add_cascade新增選單標籤,add_command新增條目到選單。 v_mode = IntVar() view_menu.add_radiobutton(label = "標準型",command=standard,variable = v_mode,value = 0) view_menu.add_radiobutton(label = "科學型",variable = v_mode,value = 1) view_menu.add_radiobutton(label = "程式設計師型",variable =v_mode,value = 2) view_menu.add_radiobutton(label = "統計型",variable = v_mode,value = 3) view_menu.add_separator() h_mode = IntVar() view_menu.add_radiobutton(label = "歷史記錄",variable = h_mode,value = 0) view_menu.add_radiobutton(label = "數字分組",variable = h_mode,value = 1) menubar.add_cascade(label = "檢視(V)",menu = view_menu) #建立下拉選單編輯 edit = Menu(menubar,tearoff = 0) edit.add_command(label = "複製") edit.add_command(label = "黏貼") menubar.add_cascade(label = "編輯(E)",menu = edit) #建立下拉選單幫助 helpm = Menu(menubar,tearoff=0) helpm.add_command(label = "檢視幫助") helpm.add_command(label = "關於計算器") menubar.add_cascade(label = "幫助(H)",menu= helpm) #顯示選單 root.config(menu = menubar) #####################################計算器顯示框 label=Label(root,text="0",background="white",height=2,width=58,anchor="e") label.grid(row=1,columnspan=6,sticky=W) ################################顯示標準形式 standard() root.mainloop()
六.最後附上我的效果圖