日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

如何利用python的tkinter實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器

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

做一個(gè)計(jì)算器,這是我想要達(dá)成的效果:

如何利用python的tkinter實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器

在按下按鈕或者按下鍵盤的時(shí)候,第一行輸入框會(huì)顯示輸入的內(nèi)容,第二行顯示框則會(huì)預(yù)覽運(yùn)算結(jié)果,如果發(fā)生異常,輸入內(nèi)容格式錯(cuò)誤,無(wú)法計(jì)算,則顯示框顯示“錯(cuò)誤”。

按“=”按鈕或按鍵回車計(jì)算結(jié)果,結(jié)果顯示在第一行。

1.準(zhǔn)備工作

導(dǎo)入庫(kù) tkinter

import tkinter as tk2. 開(kāi)始

定義兩個(gè)變量:

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

equal_is 用于判斷是否已經(jīng)計(jì)算出結(jié)果,textchange是用于設(shè)置輸入框的內(nèi)容。

2.1 生成控件

首先生成窗體:

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

為了方便,在這里定義一個(gè)函數(shù) create_btn

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

因?yàn)橛行┌粹o的輸入內(nèi)容并不等于它的文本內(nèi)容(比如按鈕“×”,輸入“*”),因此我們?cè)O(shè)置一個(gè)空的參數(shù) pri ,在 pri 沒(méi)有被賦值的時(shí)候,輸入內(nèi)容則為 text 。

text_print 是輸入內(nèi)容的函數(shù),這個(gè)在后面會(huì)定義。

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 函數(shù)生成每一個(gè)按鈕。

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’)

上面創(chuàng)建兩個(gè)標(biāo)簽,作為輸入框和顯示框。

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

然后定義函數(shù) grid_rowconfigure 和 grid_columnconfigure,用于自動(dòng)填充行和列:

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

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

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

定義 text_print 函數(shù),當(dāng)按鈕被點(diǎn)擊時(shí)輸入內(nèi)容,當(dāng)按鈕“=”被點(diǎn)擊的時(shí)候計(jì)算結(jié)果:

def text_print(x): #函數(shù)按鈕輸入算式 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#判斷格式有無(wú)錯(cuò)誤 if x==’=’:text_equal()#計(jì)算結(jié)果

show_is 用于判斷格式有無(wú)錯(cuò)誤:

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

text_equal 是計(jì)算結(jié)果的函數(shù):

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

這里詳細(xì)說(shuō)明一下 equal_is 的作用:

因?yàn)橛?jì)算了結(jié)果后顯示框會(huì)清空,為了防止二次計(jì)算導(dǎo)致輸入框也跟著清空,我們需要判斷是否已經(jīng)計(jì)算過(guò)結(jié)果,這時(shí)就用到變量 equal_is 。

當(dāng)輸入內(nèi)容時(shí),equal_is 變?yōu)?True,計(jì)算結(jié)果后,equal_is 變?yōu)?False,如果 equal_is == True,則不計(jì)算結(jié)果。

2.3 綁定鍵盤事件

我設(shè)置的鍵盤按鍵及其對(duì)應(yīng)輸入內(nèi)容:

輸入內(nèi)容 對(duì)應(yīng)按鍵 0~9 0~9 + + - - * * / / 退格 BackSpace 清空 Delete 計(jì)算結(jié)果 Return(Enter鍵)

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

def bind_print(event): #函數(shù)鍵盤事件輸入算式 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)#輸入按鍵內(nèi)容,char不會(huì)獲得Ctrl,Shift等特殊按鍵的文本la.configure(text=textchange)#顯示內(nèi)容show_is()#判斷是否錯(cuò)誤equal_is=False else:text_equal()

如果按下的是特殊按鍵,除非是退格和回車,否則都不會(huì)有反應(yīng),

按下字母、數(shù)字、符號(hào)鍵的時(shí)候,輸入按鍵內(nèi)容。

接下來(lái)就是綁定鍵盤事件了:

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

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

2.4 循環(huán)

將主窗體root放入主循環(huán)中:

root.mainloop()3.全部代碼

import tkinter as tkdef create_btn(text,col,row,cs,rs,pri=’’,px=(1,1),py=(1,1)): #函數(shù)生成按鈕 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): #函數(shù)填充行 for i in rows:root.grid_rowconfigure(i,weight=1)def grid_columnconfigure(*cols): #函數(shù)填充列 for i in cols:root.grid_columnconfigure(i,weight=1)def bind_print(event): #函數(shù)鍵盤事件輸入算式 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): #函數(shù)按鈕輸入算式 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): #函數(shù)計(jì)算結(jié)果并上到輸入框 global textchange,equal_is if lab[’text’]!=’錯(cuò)誤’ and equal_is==False:textchange=lab[’text’]la.configure(text=textchange)lab.configure(text=’’)equal_is=Truedef show_is(): #顯示框內(nèi)容 global textchange if textchange!=’’:try: textshow=eval(textchange)except (SyntaxError,TypeError,NameError): lab.configure(text=’錯(cuò)誤’)else: lab.configure(text=textshow) else:lab.configure(text=’’)root=tk.Tk()#創(chuàng)建窗體root.geometry(’250x350’)root.title(’計(jì)算器’)root.bind(’<Key>’,bind_print)equal_is=False #定義一些函數(shù)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. 結(jié)束語(yǔ)

以上就是做一個(gè)簡(jiǎn)單計(jì)算器的過(guò)程,效果如開(kāi)頭所示。

本人技術(shù)還較差,歡迎向我提出任何的意見(jiàn)。

到此這篇關(guān)于如何利用python的tkinter實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器的文章就介紹到這了,更多相關(guān)python tkinter簡(jiǎn)單計(jì)算器內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品99在线观看| 国产精品久久久久77777丨| 久久精品国产一区二区| 欧美性www| 国产欧美日韩影院| 欧美日本不卡高清| 国产亚洲精品美女久久| 国产精品欧美大片| 国产精品密蕾丝视频下载| 国产精品蜜月aⅴ在线| 国产精品嫩模av在线| 鲁大师精品99久久久| 久久亚洲国产精品尤物| 久久一区视频| 日韩美女一区二区三区在线观看| 国产一区2区| 精品淫伦v久久水蜜桃| 福利视频一区| 久久激情一区| 男人的天堂亚洲一区| 麻豆精品91| 亚洲精品人人| 国产美女久久| 国产一区二区三区不卡视频网站| 亚洲成人av观看| 欧美亚洲激情| 在线观看亚洲精品福利片| 精品国产美女a久久9999| 激情综合五月| 亚洲a一区二区三区| 午夜在线精品| 亚洲精品激情| 久久国内精品| 丝袜诱惑一区二区| 欧美女激情福利| 亚洲日本欧美| 超级白嫩亚洲国产第一| 欧美日韩国产免费观看视频| 日本不卡视频一二三区| 国产精品手机在线播放| 激情久久一区二区| 欧美精品九九| 欧美在线黄色| av在线最新| 国产精品日韩久久久| 国产欧美一区二区三区国产幕精品| 国产精品高潮呻吟久久久久| 国产精品专区免费| 日韩精品一二三四| 麻豆传媒一区二区三区| 国产中文一区| 国产探花一区| 成人看片网站| 欧美日韩1区2区3区| 国产高清不卡| 日韩欧美高清一区二区三区| 中文在线а√天堂| 亚洲三级av| 国产传媒av在线| 男人的天堂久久精品| 精品免费av| 国产精品嫩草99av在线| 欧美激情综合| 国产精品毛片| 日韩欧美中文| 欧美在线看片| 在线视频日韩| 精品一区二区三区中文字幕视频| 五月天久久久| 国产精品99精品一区二区三区∴| 欧美日韩中文一区二区| 久久国产三级| 蜜臀av免费一区二区三区| 国产精品午夜一区二区三区| 精品在线99| 精品九九在线| 综合国产在线| 蜜桃成人精品| 免费亚洲一区| 石原莉奈在线亚洲三区| 日韩欧美一区二区三区在线视频 | 不卡福利视频| 日本中文字幕一区二区| 亚洲成人国产| 国产激情综合| 巨乳诱惑日韩免费av| 日韩久久精品网| 日本91福利区| 欧美专区在线| 99久久久久| 精品国产一区二区三区av片| 深夜日韩欧美| 国产视频久久| 91精品国产调教在线观看| 美女性感视频久久| 欧美在线黄色| 亚洲精品亚洲人成在线观看| 亚洲午夜久久久久久尤物| 精品免费视频| 国产美女亚洲精品7777| 中文字幕一区二区三区在线视频| 久久久国产亚洲精品| 国产亚洲人成a在线v网站 | 亚洲欧洲国产精品一区| 欧美理论视频| 成人看片网站| 国产盗摄——sm在线视频| 国产精品久久久久久久久久白浆 | 一区二区电影| 日韩一区二区免费看| 精品亚洲美女网站| 鲁鲁在线中文| 国产不卡精品| 国产美女视频一区二区| 日韩av中文字幕一区二区| 亚洲视频电影在线| 性欧美精品高清| 欧美xxxx中国| 福利片在线一区二区| 精品国产中文字幕第一页| 欧美极品一区二区三区| 久久亚洲道色| 国产一区丝袜| 久久99久久久精品欧美| 国产精品啊v在线| 欧美精品导航| 国产一区二区三区四区| 国产一区二区三区不卡视频网站| 国产精品久久久久毛片大屁完整版| 欧美亚洲福利| 国产激情一区| 精品美女视频 | 免费精品国产| 女人av一区| 亚洲激情不卡| 国产综合婷婷| 99国产一区| 少妇精品在线| 国产一区 二区| 国产欧美成人| 久久不卡国产精品一区二区| 卡一卡二国产精品| 人在线成免费视频| 色爱综合av| 亚洲精品小说| 婷婷成人在线| 亚洲免费播放| 免费在线看一区| 欧美在线精品一区| 国产精品亚洲综合久久| 欧美aⅴ一区二区三区视频| 麻豆传媒一区二区三区| 97精品国产福利一区二区三区| 久久婷婷亚洲| 老鸭窝毛片一区二区三区| 日韩在线电影| 国产精品久久久久77777丨| 国产91在线播放精品| 高清久久精品| 久久精品国产大片免费观看| 亚洲欧美视频| 国产欧美在线| 日韩在线观看一区| 亚洲激情中文| 欧美一级二级三级视频| 日韩专区在线视频| 久久精品99久久久| 欧美aa一级| 免费在线观看成人| 欧美aaaaaa午夜精品| 亚洲天堂1区| 亚洲精品免费观看| 久久亚洲国产精品尤物| 亚洲电影在线| 天堂va在线高清一区| 成人在线超碰| 亚洲免费网址| 精品国产网站| 美女精品网站| 国产精品毛片视频| 亚洲精品福利电影| 一区二区三区四区精品视频| 免费在线欧美黄色| aⅴ色国产欧美| 少妇精品在线| 捆绑调教日本一区二区三区| 一二三区精品| www.com.cn成人| 亚洲精品日本| 91视频一区| 亚洲一区欧美| zzzwww在线看片免费| 久久av在线| 久久精品女人| 亚洲视频二区| 成人免费一区| 一区二区精彩视频| 欧洲一级精品| 青青草伊人久久| 国产一区久久|