亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

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

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

熱門標(biāo)簽:南京銷售外呼系統(tǒng)軟件 地圖制圖標(biāo)注位置改變是移位嗎 浙江電銷卡外呼系統(tǒng)好用嗎 蓋州市地圖標(biāo)注 地圖標(biāo)注的意義點(diǎn) 315電話機(jī)器人廣告 上海機(jī)器人外呼系統(tǒng)哪家好 地圖標(biāo)注微信發(fā)送位置不顯示 房產(chǎn)電銷外呼系統(tǒng)

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

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

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

1.準(zhǔn)備工作

導(dǎo)入庫 tkinter

import tkinter as tk

2. 開始

定義兩個(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 沒有被賦值的時(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	#判斷格式有無錯(cuò)誤
    if x=='=':
        text_equal()	#計(jì)算結(jié)果

show_is 用于判斷格式有無錯(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)	#如果沒有出錯(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']	#無格式錯(cuò)誤時(shí),計(jì)算結(jié)果
        la.configure(text=textchange)	#輸入框顯示結(jié)果
        lab.configure(text='')	#清空顯示框
        equal_is=True

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

因?yàn)橛?jì)算了結(jié)果后顯示框會(huì)清空,為了防止二次計(jì)算導(dǎo)致輸入框也跟著清空,我們需要判斷是否已經(jīng)計(jì)算過結(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=a
        elif 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)容。

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

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

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

2.4 循環(huán)

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

root.mainloop()

3.全部代碼

import tkinter as tk

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)))
    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=a
        elif 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=a
        elif 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=True

def 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é)束語

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

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

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

您可能感興趣的文章:
  • python基于tkinter制作下班倒計(jì)時(shí)工具
  • Python實(shí)戰(zhàn)之用tkinter庫做一個(gè)鼠標(biāo)模擬點(diǎn)擊器
  • Python聊天室?guī)Ы缑鎸?shí)現(xiàn)的示例代碼(tkinter,Mysql,Treading,socket)
  • python基于tkinter制作m3u8視頻下載工具
  • Python中tkinter的用戶登錄管理的實(shí)現(xiàn)
  • python tkinter實(shí)現(xiàn)定時(shí)關(guān)機(jī)
  • python中Tkinter 窗口之輸入框和文本框的實(shí)現(xiàn)
  • python Tkinter的簡(jiǎn)單入門教程
  • python tkinter 獲得按鈕的文本值
  • Python基礎(chǔ)之tkinter圖形化界面學(xué)習(xí)

標(biāo)簽:赤峰 陽泉 臨汾 日照 貴州 金華 雙鴨山 克拉瑪依

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《如何利用python的tkinter實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器》,本文關(guān)鍵詞  如何,利用,python,的,tkinter,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《如何利用python的tkinter實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器》相關(guān)的同類信息!
  • 本頁收集關(guān)于如何利用python的tkinter實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    韩国毛片免费大片| 久久国产精品自由自在| 九九精品久久久久久久久| 国产极品精频在线观看| 91麻豆精品国产自产在线| 美女免费黄网站| 日本乱中文字幕系列| 久久国产影视免费精品| 日韩一级黄色片| 成人免费网站久久久| 午夜激情视频在线观看| 国产不卡在线播放| 成人免费高清视频| 欧美1卡一卡二卡三新区| 国产亚洲精品aaa大片| a级黄色毛片免费播放视频| 国产网站免费| 国产网站免费| 天天色色网| 亚欧成人毛片一区二区三区四区| 欧美电影免费| 久草免费在线色站| 黄视频网站在线免费观看| 午夜在线亚洲男人午在线| 黄色短视屏| 国产一区二区精品| 四虎影视库国产精品一区| 国产视频在线免费观看| 一级女性大黄生活片免费| 成人免费网站久久久| 亚洲 男人 天堂| 天天做人人爱夜夜爽2020| 午夜精品国产自在现线拍| 精品国产香蕉在线播出| 国产亚洲精品成人a在线| 国产伦久视频免费观看视频| 99色视频在线| 国产91精品系列在线观看| 中文字幕一区二区三区精彩视频 | 天天做日日爱夜夜爽| 亚洲 欧美 91| 国产一区二区精品久久91| 欧美激情一区二区三区视频 | 午夜激情视频在线观看| 色综合久久天天综合观看| 中文字幕97| 美国一区二区三区| 欧美另类videosbestsex高清| 韩国毛片免费大片| 久久精品免视看国产明星| 欧美一级视频免费| 四虎影视久久| 中文字幕97| 欧美激情一区二区三区中文字幕| 四虎影视久久| 国产伦理精品| 国产精品自拍在线观看| 四虎影视库| 国产不卡在线播放| 国产成人精品综合在线| 亚洲天堂免费观看| 欧美18性精品| 精品视频免费观看| 美女免费毛片| 99久久精品国产高清一区二区 | 日本在线不卡免费视频一区| 色综合久久天天综合| 欧美爱爱动态| 国产一区二区福利久久| 九九精品在线播放| 国产国产人免费视频成69堂| 99久久精品费精品国产一区二区| 九九干| a级毛片免费观看网站| 亚洲精品影院一区二区| 欧美激情一区二区三区在线| 黄视频网站在线免费观看| 青青久久精品| 九九久久99| 欧美激情一区二区三区在线播放| 欧美国产日韩在线| 国产一级强片在线观看| 美女免费黄网站| 久久精品店| 成人a大片高清在线观看| 亚洲爆爽| 深夜做爰性大片中文| 黄视频网站免费观看| 99久久精品国产片| 免费一级片在线观看| 麻豆系列 在线视频| 日日日夜夜操| 九九精品久久| 国产成人精品一区二区视频| 台湾美女古装一级毛片| 国产伦精品一区二区三区在线观看| 国产韩国精品一区二区三区| 久久久成人网| 久久国产精品自由自在| 亚洲 欧美 91| 欧美另类videosbestsex视频| 国产一区二区福利久久| 一级女人毛片人一女人| 色综合久久天天综线观看| 午夜家庭影院| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 韩国毛片 免费| 日本在线不卡视频| 日日夜夜婷婷| 四虎论坛| 四虎影视久久久免费| 精品在线视频播放| 国产成人欧美一区二区三区的| 美女被草网站| 亚洲 欧美 91| 欧美另类videosbestsex视频| 欧美电影免费看大全| 国产高清在线精品一区二区| 精品国产三级a| 四虎久久精品国产| 亚飞与亚基在线观看| 亚洲女人国产香蕉久久精品 | 黄视频网站在线免费观看| 四虎影视久久久免费| 久久国产精品自线拍免费| 韩国妈妈的朋友在线播放| 999久久狠狠免费精品| 精品视频在线看| 中文字幕97| 二级片在线观看| 日韩男人天堂| 国产综合91天堂亚洲国产| 久久99爰这里有精品国产| 精品久久久久久影院免费| 欧美激情一区二区三区在线播放| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 一本高清在线| 四虎论坛| 人人干人人草| 天天做日日干| 亚洲女人国产香蕉久久精品 | 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 九九热精品免费观看| 九九精品在线播放| 色综合久久久久综合体桃花网| 精品视频在线看| 久久99爰这里有精品国产| 999久久狠狠免费精品| 久久精品大片| 久久99爰这里有精品国产| 成人免费网站久久久| 国产网站免费视频| 午夜在线亚洲男人午在线| 日韩av成人| 午夜在线亚洲| 91麻豆精品国产自产在线| 麻豆系列国产剧在线观看| 青草国产在线观看| 午夜在线观看视频免费 成人| 国产激情视频在线观看| 九九免费精品视频| 高清一级片| 日韩一级黄色| 夜夜操网| 黄色免费三级| 成人免费福利片在线观看| 九九精品在线播放| 可以免费看污视频的网站| 国产精品1024永久免费视频| 美女免费黄网站| 青青久热| 精品国产亚洲人成在线| 精品国产亚洲一区二区三区| 色综合久久手机在线| 精品视频一区二区三区免费| 日韩女人做爰大片| 亚欧成人乱码一区二区| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 台湾美女古装一级毛片| 91麻豆精品国产自产在线观看一区 | 成人免费网站视频ww| 成人在免费观看视频国产| 国产一区二区精品久久91| 精品视频在线看 | 香蕉视频三级| 久草免费在线色站| 你懂的日韩| 九九久久99综合一区二区| 91麻豆精品国产片在线观看| 久久国产一久久高清| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 99久久精品国产高清一区二区 | 日韩免费在线观看视频| 国产成人啪精品| 一本高清在线| 国产亚洲精品aaa大片| 国产极品精频在线观看| 日本在线www| 日韩中文字幕一区二区不卡| 国产一区二区福利久久|