成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 如何利用python的tkinter實現(xiàn)一個簡單的計算器

如何利用python的tkinter實現(xiàn)一個簡單的計算器

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

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

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

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

1.準備工作

導入庫 tkinter

import tkinter as tk

2. 開始

定義兩個變量:

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

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

2.1 生成控件

首先生成窗體:

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

為了方便,在這里定義一個函數(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)))	#輸入內容
    a.grid(column=col,row=row,columnspan=cs,rowspan=rs,padx=px,pady=py,sticky='nswe')
    return(a)

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

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

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ù)生成每一個按鈕。

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)建兩個標簽,作為輸入框和顯示框。

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

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

def grid_rowconfigure(*rows):   #函數(shù)填充行。*rows:允許接收多個參數(shù)
    for i in rows:
        root.grid_rowconfigure(i,weight=1)
        
def grid_columnconfigure(*cols):    #函數(shù)填充列。*cols:允許接收多個參數(shù)
    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 定義輸入和計算函數(shù)

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

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()	#計算結果

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 是計算結果的函數(shù):

def text_equal(event=None):   #函數(shù)計算結果并上到輸入框
    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 變?yōu)?True,計算結果后,equal_is 變?yōu)?False,如果 equal_is == True,則不計算結果。

2.3 綁定鍵盤事件

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

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

定義一個函數(shù) bind_print,跟 text_print 有點相似,但有些不一樣(原諒我技術差,不知道別的方法,只能重新定義一個函數(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)	#輸入按鍵內容,char不會獲得Ctrl,Shift等特殊按鍵的文本
        la.configure(text=textchange)	#顯示內容
        show_is()	#判斷是否錯誤
        equal_is=False
    else:
        text_equal()        

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

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

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

root.bind('Key>',bind_print)	#當鍵盤按下任意鍵,執(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ù)計算結果并上到輸入框
    global textchange,equal_is
    if lab['text']!='錯誤' and equal_is==False:
        textchange=lab['text']
        la.configure(text=textchange)
        lab.configure(text='')
        equal_is=True

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='')

root=tk.Tk()        #創(chuàng)建窗體
root.geometry('250x350')
root.title('計算器')
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. 結束語

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

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

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

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

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

巨人網(wǎng)絡通訊聲明:本文標題《如何利用python的tkinter實現(xiàn)一個簡單的計算器》,本文關鍵詞  如何,利用,python,的,tkinter,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《如何利用python的tkinter實現(xiàn)一個簡單的計算器》相關的同類信息!
  • 本頁收集關于如何利用python的tkinter實現(xiàn)一個簡單的計算器的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    色偷偷男人天堂| 一本一本久久a久久精品综合小说| 我要色综合中文字幕| 一区二区三区影院| 日韩精品在线观看视频| 国产精品视频九色porn| 国产一级做a爱片久久毛片a| 亚洲日本伦理| 一区二区中文字幕在线| 国产成人午夜精品| 久久亚洲二区三区| 麻豆精品蜜桃视频网站| 石原莉奈在线亚洲二区| 国产精品美女久久久久久久| 久久影视中文粉嫩av| 在线播放/欧美激情| 中文字幕一区二区三区人妻不卡| 91精品久久久久久蜜桃| 成人短剧在线观看| 国产美女在线观看一区| 久久伊人一区二区| 欧美日韩中文字幕一区二区| 国产一区二区在线免费观看| 日本少妇xxxx动漫| 寂寞护士中文字幕mp4| 成人黄色免费在线观看| 日韩大片在线播放| 国产日韩一区二区三区| 成视频免费在线看| 欧美 国产 综合| 91国产精品91| 欧美精品一级二级三级| 国产一区二区三区福利| 精品亚洲va在线va天堂资源站| 国产精品99re| 嫩草影院永久入口| 热久久免费国产视频| 日本一区高清在线视频| 激情综合色播激情啊| 成人黄页在线观看| 在线观看国产免费视频| 中文字幕日韩三级片| 亚洲永久精品一区| 亚洲第一第二区| 色哟哟欧美精品| 欧美成人三级伦在线观看| 香蕉视频免费在线| 亚洲自拍偷拍综合| 一区二区三区视频免费| 天堂网视频在线观看| 女同久久另类69精品国产| 国产精品情侣呻吟对白视频| 欧美片网站免费| 精品久久久久香蕉网| 国产一区二区女| 欧美亚洲精品在线观看| 影音先锋2020资源| 亚洲综合日本| 国内精品美女在线观看| 日韩精品极品视频在线观看免费| 欧美激情精品久久久久久免费| 欧美丝袜一区| 欧美激情一区二区三级高清视频| 欧美国产综合一区二区| 97久久精品人人爽人人爽蜜臀| 欧美精品入口| 五月天激情小说综合| 久久久综合视频| 国产乱人伦精品一区二区在线观看| 91导航在线观看| 国产一区二区三区不卡在线观看| 日本10禁啪啪无遮挡免费一区二区| 少妇高潮一区二区三区99小说| 蜜桃专区在线| 91在线一区| 国产综合中文字幕| 亚洲图片小说网| 91麻豆视频网站| 99免费在线视频观看| 欧美裸体xxxx极品少妇| 91精品产国品一二三产区| av毛片在线| 久久一日本道色综合| 欧美日韩国产精品综合| 91国内精品久久久| 亚洲欧美日韩久久久久久| 午夜成人免费电影| 免费看日本一区二区| 国产午夜久久| 日本一区二区三区免费观看| 国产精品视频福利一区二区| 国产资源在线视频| 91久久精品国产| 涩涩视频在线播放| av电影在线观看完整版一区二区| 亚洲精品在线视频| 日本成人在线不卡视频| 人妻激情偷乱频一区二区三区| 男女猛烈无遮挡| 黄动漫网站在线观看| 亚洲狠狠婷婷综合久久久| 亚洲精品一卡二卡三卡四卡| 成人黄色免费电影| 精品福利一二区| www.av黄色| 99国产超薄肉色丝袜交足的后果| 欧美性猛交xxxxx免费看| 亚洲成人av中文字幕| 成人免费毛片嘿嘿连载视频…| 国产成人禁片在线观看| 97se亚洲国产一区二区三区| 欧美三级电影在线观看| 久久精品日产第一区二区三区高清版| 精品在线观看免费| 91精品黄色片免费大全| 国产视频aaa| 在线三级中文| 日本网站免费在线观看| 亚洲欧美电影一区二区| 这里只有精品在线观看| 91精品在线看| 国产精品免费视频观看| 欧美特黄aaaaaaaa大片| 91香蕉视频在线观看| 国产一区二区精品调教| 极品在线视频| 天天综合天天综合色| 高潮无码精品色欲av午夜福利| 亚洲免费福利| 在线观看日韩av| 欧美日韩国产免费一区二区| 国产激情999| 欧美日韩五区| 亚洲国产果冻传媒av在线观看| 免费看国产曰批40分钟| 日韩欧美国产骚| 91手机在线播放| 欧美最新精品| 国产九区一区在线| 4438五月综合| av资源中文在线天堂| 福利一区二区三区视频在线观看| 国内精品久久久久久久久| 国产一区私人高清影院| 麻豆av免费看| xxxxxx在线观看| 日日躁夜夜躁aaaabbbb| 欧美一区三区| 91wwwcom在线观看| 日韩美女视频一区| 精品一区二区三区自拍图片区| 97人洗澡人人免费公开视频碰碰碰| 国产成人精品一区二区三区免费| 不卡的在线视频| 国产精品视频大全| 欧美日韩精选| 日本高清不卡免费| 亚洲一区二区三区激情| 黄色三级视频在线观看| 亚洲精品中文字幕乱码三区91| 中文字幕欧美一区二区| 亚洲黄色免费电影| 手机看片福利在线观看| 国产区精品在线观看| 性欧美大胆高清视频| 特黄特色特刺激视频免费播放| 日本不卡视频在线播放| 性高潮久久久久久久久久| 北条麻妃在线一区| 欧美男人操女人视频| 欧美日韩国产中文字幕| 羞羞网站免费观看| 成年免费网站| 精品久久久久久久久久久久久久| 一级国产黄色片| 中文在线观看视频| 中文字幕欧美日韩一区二区三区| 日韩视频永久免费| 日韩av在线播放观看| 国产男男chinese网站| 在线免费黄网| 亚洲成年人专区| 亚洲最大色综合成人av| 亚洲国产成人一区二区| 精品第一国产综合精品aⅴ| 亚洲精品99999| www.超碰97.com| 拍拍拍在线观看视频免费| 国内精品久久久久久99蜜桃| 91精品国自产| 国产深喉视频一区二区| 动漫一区二区在线| 日韩在线观看视频一区二区三区| 999av小视频在线| 国产精品久久久久久久av大片| 日韩国产高清一区| 综合久久精品| 丰满少妇又爽又紧又丰满69| 97夜夜澡人人双人人人喊| 中文欧美日韩| 亚洲精品中文字| 97色在线观看免费视频| 亚洲高清一区二区三区| 波多野结衣家庭主妇| 欧美成人精品| 天天操天天射天天舔| 91制片在线观看| 四虎成人免费电影| 91精品国产高清久久久久久91| 国产ts一区| 日韩精品一区二区三区蜜臀| 亚洲天堂av免费在线观看| 在线播放黄色av| 国产一区二区欧美日韩| 欧美成人a∨高清免费观看| 熟妇女人妻丰满少妇中文字幕| 国产男女猛烈无遮挡| 欧美熟妇另类久久久久久不卡| 精品女同一区二区| 精品成人自拍视频| 欧美日韩一区二区三区在线视频| 小黄文在线观看| 97视频人免费观看| 久久综合香蕉| 91国产美女在线观看| 亚洲黄色一区| 午夜国产精品理论片久久影院| 女人被狂躁到高潮视频免费网站| 国产午夜视频| 久久这里只有精品1| 欧美福利在线视频| 久久国产精品免费观看| 欧美精品一区二区三区视频| 国产一区免费在线观看| 国产区精品视频| 美女在线视频免费| 久久亚洲不卡| 国内精品久久久久影院色| 亚洲精品国产综合区久久久久久久| 婷婷激情在线| 天堂一区二区三区四区| 国产探花一区二区三区| 国产精品久久久一区| 97色伦亚洲国产| 日韩黄色免费网站| 草久久免费视频| 欧美日韩三区| 性做久久久久久久免费看| 三级欧美韩日大片在线看| 亚洲视频在线a| 8x国产一区二区三区精品推荐| 国产v亚洲v天堂无码久久久| 国产精品久久久久久久免费观看| 青青在线观看视频中文字| 亚洲一级电影视频| 97影院在线午夜| 欧美美女一区二区在线观看| 欧美日韩国产中字| 亚洲国产成人91精品| 99视频在线精品国自产拍免费观看| 国产一区999| 99在线观看视频网站| 精品国免费一区二区三区| 岛国精品一区二区| www.成人黄色| 国产又爽又黄网站亚洲视频123| 九色蝌蚪国产| 欧美精品中文字幕一区二区| 亚洲永久免费视频| 日日干天天干| 日本在线影院| 白白在线精品| 麻豆美女网站| 国产后进白嫩翘臀在线观看视频| www.啪啪.com| 亚洲第一成肉网| 在线一区日本视频| 日韩欧美视频免费观看| 欧美性受xxx| 亚洲美女少妇撒尿| 干b视频在线观看| 中文字幕一区二区三区免费看| 欧美一区二区三区不卡视频| 亚洲精品国产欧美在线观看| 免费观看v片在线观看| 91免费看国产| 手机看片一区二区三区| 亚洲欧洲成人在线| 久久久久久久久久久久久9999| 亚洲视频在线观看免费| 亚洲综合久久久久| 国产精品无码久久久久| 亚洲区免费影片| 国产成人黄色片| 国产成人精品免费久久久久| 99久热在线精品视频| 成人1区2区| 国产精品爱久久久久久久小说| 欧美韩日一区二区三区四区| 国产精品美女xx| 久久国产精品久久久久久久久久| 很黄很色的网站| 成人在线视频国产| 亚洲精品乱码久久久久久日本蜜臀| 国产精品视频内| 日韩一区二区三区av| 欧美日韩中文字幕在线观看| 欧美成人黄色小视频| 日韩av加勒比| 亚洲欧美日韩天堂一区二区| 特级毛片www| 色精品一区二区三区| 91玉足脚交白嫩脚丫| 美女18一级毛片一品久道久久综合| 亚洲成人1区2区| 美女啪啪无遮挡| 四虎成人精品免费影院| 不卡视频免费在线观看| 日韩av电影中文字幕| 午夜日韩电影| 国产裸体歌舞团一区二区| 国产一区二区三区高清视频| 美女免费观看一区二区三区| 亚洲色图丝袜美腿| 欧美风狂大伦交xxxx| 精品在线亚洲视频| 亚洲精品一区二区三区四区| 欧美精品三区|