电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

如何利用python的tkinter實現一個簡單的計算器

瀏覽:3日期:2022-06-21 17:53:58

做一個計算器,這是我想要達成的效果:

如何利用python的tkinter實現一個簡單的計算器

在按下按鈕或者按下鍵盤的時候,第一行輸入框會顯示輸入的內容,第二行顯示框則會預覽運算結果,如果發生異常,輸入內容格式錯誤,無法計算,則顯示框顯示“錯誤”。

按“=”按鈕或按鍵回車計算結果,結果顯示在第一行。

1.準備工作

導入庫 tkinter

import tkinter as tk2. 開始

定義兩個變量:

equal_is=False #定義一些變量textchange=’’

equal_is 用于判斷是否已經計算出結果,textchange是用于設置輸入框的內容。

2.1 生成控件

首先生成窗體:

root=tk.Tk()#創建窗體root.geometry(’250x350’)root.title(’計算器’)

為了方便,在這里定義一個函數 create_btn

def create_btn(text,col,row,cs,rs,pri=’’,px=(1,1),py=(1,1)): #函數:生成按鈕 if pri==’’:t=text else:t=pri a=tk.Button(root,text=text,width=4,command=lambda:(text_print(t)))#輸入內容 a.grid(column=col,row=row,columnspan=cs,rowspan=rs,padx=px,pady=py,sticky=’nswe’) return(a)

因為有些按鈕的輸入內容并不等于它的文本內容(比如按鈕“×”,輸入“*”),因此我們設置一個空的參數 pri ,在 pri 沒有被賦值的時候,輸入內容則為 text 。

text_print 是輸入內容的函數,這個在后面會定義。

btn={} #生成按鈕btn[’1’]=create_btn(’1’,0,5,1,1)btn[’2’]=create_btn(’2’,1,5,1,1)btn[’3’]=create_btn(’3’,2,5,1,1)btn[’4’]=create_btn(’4’,0,4,1,1)btn[’5’]=create_btn(’5’,1,4,1,1)btn[’6’]=create_btn(’6’,2,4,1,1)btn[’7’]=create_btn(’7’,0,3,1,1)btn[’8’]=create_btn(’8’,1,3,1,1)btn[’9’]=create_btn(’9’,2,3,1,1)btn[’0’]=create_btn(’0’,0,6,2,1)btn[’.’]=create_btn(’.’,2,6,1,1)btn[’=’]=create_btn(’=’,4,5,1,2)btn[’+’]=create_btn(’+’,3,6,1,1)btn[’-’]=create_btn(’-’,3,5,1,1)btn[’*’]=create_btn(’×’,3,4,1,1,pri=’*’)btn[’/’]=create_btn(’÷’,4,4,1,1,pri=’/’)btn[’←’]=create_btn(’←’,1,2,1,1)btn[’C’]=create_btn(’C’,2,2,1,1)btn[’(’]=create_btn(’(’,3,2,1,1)btn[’)’]=create_btn(’)’,4,2,1,1)btn[’**2’]=create_btn(’x²’,3,3,1,1,pri=’**2’)btn[’**(-1)’]=create_btn(’1/x’,4,3,1,1,pri=’**(-1)’)

上面是用 create_btn 函數生成每一個按鈕。

la=tk.Label(root,text=’’,bg=’white’,fg=’black’,font=(’宋體’,24),anchor=’w’,relief=’flat’) #生成輸入框la.grid(column=0,row=0,columnspan=5,rowspan=1,sticky=’we’)lab=tk.Label(root,bg=’white’,fg=’grey’,height=1,font=(’宋體’,22),anchor=’w’,relief=’flat’) #生成顯示框lab.grid(column=0,row=1,columnspan=5,rowspan=1,sticky=’we’)

上面創建兩個標簽,作為輸入框和顯示框。

la 是輸入框,lab是顯示框。

然后定義函數 grid_rowconfigure 和 grid_columnconfigure,用于自動填充行和列:

def grid_rowconfigure(*rows): #函數填充行。*rows:允許接收多個參數 for i in rows:root.grid_rowconfigure(i,weight=1)def grid_columnconfigure(*cols): #函數填充列。*cols:允許接收多個參數 for i in cols:root.grid_columnconfigure(i,weight=1)

在窗體被改變大小時,按鈕會自動填充四周,而輸入、顯示框只填充左右兩邊(第2,3,4,5,6行會向豎直方向填充,每一列都會向水平方向填充)。

grid_rowconfigure(2,3,4,5,6)grid_columnconfigure(0,1,2,3,4)2.2 定義輸入和計算函數

定義 text_print 函數,當按鈕被點擊時輸入內容,當按鈕“=”被點擊的時候計算結果:

def text_print(x): #函數按鈕輸入算式 global textchange,equal_is#聲明全局變量 if x!=’=’:if x==’←’: a=str(textchange)[0:-1] textchange=a#退格elif x==’C’: textchange=’’#清空else: textchange=str(textchange)+str(x)#輸入la.configure(text=textchange)show_is()equal_is=False#判斷格式有無錯誤 if x==’=’:text_equal()#計算結果

show_is 用于判斷格式有無錯誤:

def show_is(): #顯示框內容 global textchange#聲明全局變量 if textchange!=’’:try: textshow=eval(textchange)except (SyntaxError,TypeError,NameError): lab.configure(text=’錯誤’)#如果出錯了,則顯示“錯誤”else: lab.configure(text=textshow)#如果沒有出錯,則顯示結果 else:lab.configure(text=’’)#如果輸入框為空,那么清空顯示框

text_equal 是計算結果的函數:

def text_equal(event=None): #函數計算結果并上到輸入框 global textchange,equal_is#聲明全局變量 if lab[’text’]!=’錯誤’ and equal_is==False:textchange=lab[’text’]#無格式錯誤時,計算結果la.configure(text=textchange)#輸入框顯示結果lab.configure(text=’’)#清空顯示框equal_is=True

這里詳細說明一下 equal_is 的作用:

因為計算了結果后顯示框會清空,為了防止二次計算導致輸入框也跟著清空,我們需要判斷是否已經計算過結果,這時就用到變量 equal_is 。

當輸入內容時,equal_is 變為 True,計算結果后,equal_is 變為 False,如果 equal_is == True,則不計算結果。

2.3 綁定鍵盤事件

我設置的鍵盤按鍵及其對應輸入內容:

輸入內容 對應按鍵 0~9 0~9 + + - - * * / / 退格 BackSpace 清空 Delete 計算結果 Return(Enter鍵)

定義一個函數 bind_print,跟 text_print 有點相似,但有些不一樣(原諒我技術差,不知道別的方法,只能重新定義一個函數):

def bind_print(event): #函數鍵盤事件輸入算式 global textchange,equal_is if event.keysym!=’Return’:if event.keysym==’BackSpace’:#如果按鍵名等于“BackSpace”(退格鍵),那么就退格 a=str(textchange)[0:-1] textchange=aelif event.keysym==’Delete’:#清空 textchange=’’else: textchange=str(textchange)+str(event.char)#輸入按鍵內容,char不會獲得Ctrl,Shift等特殊按鍵的文本la.configure(text=textchange)#顯示內容show_is()#判斷是否錯誤equal_is=False else:text_equal()

如果按下的是特殊按鍵,除非是退格和回車,否則都不會有反應,

按下字母、數字、符號鍵的時候,輸入按鍵內容。

接下來就是綁定鍵盤事件了:

root.bind(’<Key>’,bind_print)#當鍵盤按下任意鍵,執行bind_print

這樣,界面布置和功能就完成了‘

2.4 循環

將主窗體root放入主循環中:

root.mainloop()3.全部代碼

import tkinter as tkdef create_btn(text,col,row,cs,rs,pri=’’,px=(1,1),py=(1,1)): #函數生成按鈕 if pri==’’:t=text else:t=pri a=tk.Button(root,text=text,width=4,command=lambda:(text_print(t))) a.grid(column=col,row=row,columnspan=cs,rowspan=rs,padx=px,pady=py,sticky=’nswe’) return(a)def grid_rowconfigure(*rows): #函數填充行 for i in rows:root.grid_rowconfigure(i,weight=1)def grid_columnconfigure(*cols): #函數填充列 for i in cols:root.grid_columnconfigure(i,weight=1)def bind_print(event): #函數鍵盤事件輸入算式 global textchange,equal_is if event.keysym!=’Return’:if event.keysym==’BackSpace’: a=str(textchange)[0:-1] textchange=aelif event.keysym==’Delete’: textchange=’’else: textchange=str(textchange)+str(event.char)la.configure(text=textchange)show_is()equal_is=False else:text_equal()def text_print(x): #函數按鈕輸入算式 global textchange,equal_is if x!=’=’:if x==’←’: a=str(textchange)[0:-1] textchange=aelif x==’C’: textchange=’’else: textchange=str(textchange)+str(x)la.configure(text=textchange)show_is()equal_is=False if x==’=’:text_equal() def text_equal(event=None): #函數計算結果并上到輸入框 global textchange,equal_is if lab[’text’]!=’錯誤’ and equal_is==False:textchange=lab[’text’]la.configure(text=textchange)lab.configure(text=’’)equal_is=Truedef show_is(): #顯示框內容 global textchange if textchange!=’’:try: textshow=eval(textchange)except (SyntaxError,TypeError,NameError): lab.configure(text=’錯誤’)else: lab.configure(text=textshow) else:lab.configure(text=’’)root=tk.Tk()#創建窗體root.geometry(’250x350’)root.title(’計算器’)root.bind(’<Key>’,bind_print)equal_is=False #定義一些函數textchange=’’la=tk.Label(root,text=’’,bg=’white’,fg=’black’,font=(’宋體’,24),anchor=’w’,relief=’flat’) #生成輸入框la.grid(column=0,row=0,columnspan=5,rowspan=1,sticky=’we’)lab=tk.Label(root,bg=’white’,fg=’grey’,height=1,font=(’宋體’,22),anchor=’w’,relief=’flat’) #生成顯示框lab.grid(column=0,row=1,columnspan=5,rowspan=1,sticky=’we’)btn={} #生成按鈕btn[’1’]=create_btn(’1’,0,5,1,1)btn[’2’]=create_btn(’2’,1,5,1,1)btn[’3’]=create_btn(’3’,2,5,1,1)btn[’4’]=create_btn(’4’,0,4,1,1)btn[’5’]=create_btn(’5’,1,4,1,1)btn[’6’]=create_btn(’6’,2,4,1,1)btn[’7’]=create_btn(’7’,0,3,1,1)btn[’8’]=create_btn(’8’,1,3,1,1)btn[’9’]=create_btn(’9’,2,3,1,1)btn[’0’]=create_btn(’0’,0,6,2,1)btn[’.’]=create_btn(’.’,2,6,1,1)btn[’=’]=create_btn(’=’,4,5,1,2)btn[’+’]=create_btn(’+’,3,6,1,1)btn[’-’]=create_btn(’-’,3,5,1,1)btn[’*’]=create_btn(’×’,3,4,1,1,pri=’*’)btn[’/’]=create_btn(’÷’,4,4,1,1,pri=’/’)btn[’←’]=create_btn(’←’,1,2,1,1)btn[’C’]=create_btn(’C’,2,2,1,1)btn[’(’]=create_btn(’(’,3,2,1,1)btn[’)’]=create_btn(’)’,4,2,1,1)btn[’**2’]=create_btn(’x²’,3,3,1,1,pri=’**2’)btn[’**(-1)’]=create_btn(’1/x’,4,3,1,1,pri=’**(-1)’)grid_rowconfigure(2,3,4,5,6)grid_columnconfigure(0,1,2,3,4)root.mainloop()4. 結束語

以上就是做一個簡單計算器的過程,效果如開頭所示。

本人技術還較差,歡迎向我提出任何的意見。

到此這篇關于如何利用python的tkinter實現一個簡單的計算器的文章就介紹到這了,更多相關python tkinter簡單計算器內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 环氧铁红防锈漆_环氧漆_无溶剂环氧涂料_环氧防腐漆-华川涂料 | 防火门-专业生产甲级不锈钢钢质防火门厂家资质齐全-广东恒磊安防设备有限公司 | 27PR跨境电商导航 | 专注外贸跨境电商 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 海日牌清洗剂-打造带电清洗剂、工业清洗剂等清洗剂国内一线品牌 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 | 青岛空压机,青岛空压机维修/保养,青岛空压机销售/出租公司,青岛空压机厂家电话 | PTFE接头|聚四氟乙烯螺丝|阀门|薄膜|消解罐|聚四氟乙烯球-嘉兴市方圆氟塑制品有限公司 | 诸城网站建设-网络推广-网站优化-阿里巴巴托管-诸城恒泰互联 | 钢丝绳探伤仪-钢丝绳检测仪-钢丝绳探伤设备-洛阳泰斯特探伤技术有限公司 | pbootcms网站模板|织梦模板|网站源码|jquery建站特效-html5模板网 | 超声波清洗机_超声波清洗机设备_超声波清洗机厂家_鼎泰恒胜 | 一体式钢筋扫描仪-楼板测厚仪-裂缝检测仪-泰仕特(北京) | 软文推广发布平台_新闻稿件自助发布_媒体邀约-澜媒宝 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | 汽车润滑油厂家-机油/润滑油代理-高性能机油-领驰慧润滑科技(河北)有限公司 | 防伪溯源|防窜货|微信二维码营销|兆信_行业内领先的防伪防窜货数字化营销解决方案供应商 | uv固化机-丝印uv机-工业烤箱-五金蚀刻机-分拣输送机 - 保定市丰辉机械设备制造有限公司 | 淘气堡_室内儿童乐园_户外无动力儿童游乐设备-高乐迪(北京) | IP检测-检测您的IP质量| CCE素质教育博览会 | CCE素博会 | 教育展 | 美育展 | 科教展 | 素质教育展 | 铝合金线槽_铝型材加工_空调挡水板厂家-江阴炜福金属制品有限公司 | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 全自动包装机_灌装机生产厂家-迈驰包装设备有限公司 | 北京遮阳网-防尘盖土网-盖土草坪-迷彩网-防尘网生产厂家-京兴科技 | 黑龙江京科脑康医院-哈尔滨精神病医院哪家好_哈尔滨精神科医院排名_黑龙江精神心理病专科医院 | 高低温试验房-深圳高低温湿热箱-小型高低温冲击试验箱-爱佩试验设备 | 渣土车电机,太阳能跟踪器电机,蜗轮蜗杆减速电机厂家-淄博传强电机 | 机构创新组合设计实验台_液压实验台_气动实训台-戴育教仪厂 | 沥青灌缝机_路面灌缝机_道路灌缝机_沥青灌缝机厂家_济宁萨奥机械有限公司 | 乐泰胶水_loctite_乐泰胶_汉高乐泰授权(中国)总代理-鑫华良供应链 | 淄博不锈钢,淄博不锈钢管,淄博不锈钢板-山东振远合金科技有限公司 | 浇注料-高铝砖耐火砖-郑州凯瑞得窑炉耐火材料有限公司 | 单柱拉力机-橡胶冲片机-哑铃裁刀-江都轩宇试验机械厂 | 合同书格式和范文_合同书样本模板_电子版合同,找范文吧 | 不锈钢闸阀_球阀_蝶阀_止回阀_调节阀_截止阀-可拉伐阀门(上海)有限公司 | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 江西高职单独招生-江西单招考试-江西高职单招网 | 油罐车_加油机_加油卷盘_加油机卷盘_罐车人孔盖_各类球阀_海底阀等车用配件厂家-湖北华特专用设备有限公司 | 耐磨陶瓷,耐磨陶瓷管道_厂家-淄博拓创陶瓷科技 | 玻璃钢板-玻璃钢防腐瓦-玻璃钢材料-广东壹诺 |