最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python制作簡(jiǎn)易計(jì)算器功能

 更新時(shí)間:2022年04月27日 12:07:56   作者:壹屋安源  
這篇文章主要為大家詳細(xì)介紹了Python制作簡(jiǎn)易計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Python制作簡(jiǎn)易計(jì)算器的具體代碼,供大家參考,具體內(nèi)容如下

簡(jiǎn)易計(jì)算器

簡(jiǎn)易計(jì)算器功能:

  • 實(shí)現(xiàn)輸入,計(jì)算,輸出功能;
  • 可以計(jì)算基本的加減乘除功能;
  • 處理除法中除數(shù)不能為零的設(shè)計(jì);
  • 處理輸入不能為空的設(shè)計(jì);
  • 記錄歷史計(jì)算,顯示在右邊文本框;

不同于之前的兩個(gè)項(xiàng)目,這個(gè)項(xiàng)目的布局是網(wǎng)格布局,窗口的設(shè)計(jì)比較像,但是實(shí)際的網(wǎng)格布局實(shí)現(xiàn)過(guò)程中也是碰了許多的坑。

窗口

實(shí)現(xiàn)最基本的窗口界面

import tkinter as tk
import tkinter.messagebox
win = tk.Tk() ? ? ? ? #窗口名稱
win.title("簡(jiǎn)易計(jì)算器")
win.geometry('650x600') ?# 這里的乘是小x
win.mainloop()

geometry()設(shè)置窗口的大小,格式:高x寬+起始x位置+起始y位置,例如:“600x600+50+50”意思是大小為600*600,起始位置坐標(biāo)為(50,50)

布局

標(biāo)題

使用標(biāo)簽Label實(shí)現(xiàn),標(biāo)簽上可以展示文字,居中,可以設(shè)置背景色,字體字號(hào),以及標(biāo)簽的大小。

b=tk.Label(win, text='簡(jiǎn)易計(jì)算器',justify=tk.CENTER, height=2 , width=50 ,font=('楷體', 20),background='lightcyan') ?# 文本框名字
b.grid(row=0,columnspan=6)

輸入框

輸入框a1,a2使用的是Entry,前面的名字使用的是Label標(biāo)簽
justify表示文字的位置,或者輸入文字的起始位置是從那一邊開(kāi)始,有左和右,
width和height,代表寬度和高度
font,里面包含楷體和字號(hào),這個(gè)可以不寫(xiě),有默認(rèn)值。
grid顯示布局的位置,行列號(hào)。row,column分別代表行和列,rowspan,columnspan代表行列方向上占據(jù)的大小
通過(guò)輸入框名字.get()獲取輸入框內(nèi)的內(nèi)容

b1=tk.Label(win, text='a:',justify=tk.CENTER, height=2 , width=5 ,font=('楷體', 15)) ?# 文本框名字
b1.grid(row=1,column=0)
a1 = tk.Entry(win, justify=tk.LEFT, width=15 , font=('楷體', 15)) ?# 文本框創(chuàng)建
a1.grid(row=1,column=1)

b2 = tk.Label(win, text='b:',justify=tk.CENTER, height=2 , width=5 , font=('楷體', 15)) ?# 文本框名字
b2.grid(row=2,column=0)
a2 = tk.Entry(win, justify=tk.LEFT, width=15 , font=('楷體', 15) ) ?# 文本框創(chuàng)建
a2.grid(row=2,column=1)

文本記錄框

記錄歷史計(jì)算的文本,通過(guò)insert插入拼接完成的字符串?dāng)?shù)據(jù),通過(guò)數(shù)值標(biāo)記完成換行 兩列換行操作。如果不設(shè)置文本框的大小,只設(shè)置占據(jù)的行列數(shù)時(shí),會(huì)導(dǎo)致窗口變得大小不定,組件之間的空隙較大,不并不很美觀。

txt = tk.Text(win,height=20, width=40 ,font=('楷體', 15))?? ?#font對(duì)輸入的文本的字體和大小進(jìn)行規(guī)定
txt.grid(row=1,column=4,rowspan=4,columnspan=4)?? ??? ??? ??? ?#大小是4*4

按鈕功能

當(dāng)兩個(gè)數(shù)據(jù)輸進(jìn)去以后,我們將數(shù)據(jù)按照按鈕點(diǎn)擊的需求進(jìn)行計(jì)算,并且彈出結(jié)果。實(shí)現(xiàn)功能:

  • 當(dāng)輸為空的時(shí)候,彈窗提示,并且保證可以再次輸入數(shù)據(jù)等操作
  • 除法運(yùn)算的特殊之處,除數(shù)不能為零,也需要在輸入錯(cuò)誤時(shí)進(jìn)行提示
  • 當(dāng)結(jié)果計(jì)算完成時(shí),要完成算式的拼接,插入文本框中
  • 提示計(jì)算的結(jié)果
  • 清空輸入框,等到下一次的計(jì)算輸入
  • 判斷歷史計(jì)算的次數(shù),為插入算式的位置進(jìn)行改變。兩列數(shù)據(jù)之間要進(jìn)行間隔的設(shè)置。

每一個(gè)按鈕的設(shè)計(jì)方法相似,知識(shí)各有各的實(shí)現(xiàn)功能,大同小異,格式都相同,只是計(jì)算不一樣??梢酝ㄟ^(guò)研究一個(gè)函數(shù)功能,類推其他幾個(gè)。

num=0?? ??#用來(lái)記錄歷史計(jì)算次數(shù)
def sum():
? ? if a1.get()=='' or a2.get()=='':
? ? ? ? return tkinter.messagebox.showinfo('消息提示', '輸入不能為空')
? ? global num
? ? num += 1
? ? a = float(a1.get()) ? ? ?#獲取輸入框內(nèi)的內(nèi)容,收集到的為字符型,需要進(jìn)行轉(zhuǎn)化
? ? b = float(a2.get())
? ? c = a + b
? ? s = str('%d'%a + ' + '+'%d'%b + ' = ' + '%d'%c)?? ??? ??? ?#完成數(shù)據(jù)的拼接
? ? if num%2==0:
? ? ? ? s=s+ '\n'?? ??? ??? ?#第偶數(shù)個(gè)算式后面加上空格進(jìn)行間隔
? ? ? ? print(num)
? ? else:
? ? ? ? s=s+'\t'?? ??? ??? ?#第奇數(shù)個(gè)算式進(jìn)行換行處理
? ? txt.insert(tk.END,s)
? ? tkinter.messagebox.showinfo('消息提示', '求商結(jié)果是:%d'%c)
? ? a1.delete(0, tk.END)?? ??? ??? ?#清空輸入框內(nèi)的數(shù)據(jù)
? ? a2.delete(0, tk.END)

def multiply():
? ? if a1.get()=='' or a2.get()=='':
? ? ? ? return tkinter.messagebox.showinfo('消息提示', '輸入不能為空')
? ? global num
? ? num += 1
? ? a = float(a1.get())
? ? b = float(a2.get())
? ? c = a * b
? ? s = str('%d' % a + ' * ' + '%d' % b + ' = ' + '%d' % c)
? ? if num%2==0:
? ? ? ? s=s+ '\n'
? ? ? ? print(num)
? ? else:
? ? ? ? s=s+'\t'
? ? txt.insert(tk.END, s)
? ? tkinter.messagebox.showinfo('消息提示', '求積結(jié)果是:%d'%c)
? ? a1.delete(0, tk.END)
? ? a2.delete(0, tk.END)
def subtract():
? ? if a1.get()=='' or a2.get()=='':
? ? ? ? return tkinter.messagebox.showinfo('消息提示', '輸入不能為空')
? ? global num
? ? num += 1
? ? a = float(a1.get())
? ? b = float(a2.get())
? ? c = a - b
? ? s = str('%d' % a + ' - ' + '%d' % b + ' = ' + '%d' % c)
? ? if num%2==0:
? ? ? ? s=s+ '\n'
? ? ? ? print(num)
? ? else:
? ? ? ? s=s+'\t'
? ? txt.insert(tk.END, s)
? ? tkinter.messagebox.showinfo('消息提示', '求差結(jié)果是:%d'%c)
? ? a1.delete(0, tk.END)
? ? a2.delete(0, tk.END)
def divide():
? ? if a1.get()=='' or a2.get()=='':
? ? ? ? return tkinter.messagebox.showinfo('消息提示', '輸入不能為空')
? ? global num
? ? num += 1
? ? a = float(a1.get())
? ? b = float(a2.get())
? ? if float(b)==0.0:
? ? ? ? tkinter.messagebox.showinfo('消息提示', '除數(shù)不能為零?。?!')
? ? ? ? a2.delete(0 , tk.END) ?# 當(dāng)除數(shù)為0時(shí),不能進(jìn)行計(jì)算,并且需要彈窗提示,清空數(shù)據(jù)
? ? else:
? ? ? ? c = a / b
? ? ? ? s = str('%d' % a + ' / ' + '%d' % b + ' = ' + '%d' % c)
? ? ? ? if num % 2 == 0:
? ? ? ? ? ? s = s + '\n'
? ? ? ? ? ? print(num)
? ? ? ? else:
? ? ? ? ? ? s = s + '\t'
? ? ? ? txt.insert(tk.END, s)
? ? ? ? tkinter.messagebox.showinfo('消息提示', '求商結(jié)果是:%d'%c)
? ? ? ? a1.delete(0, tk.END)
? ? ? ? a2.delete(0, tk.END)

按鈕

這里有一個(gè)坑,剛開(kāi)始我設(shè)計(jì)按鈕的時(shí)候直接是:command = sum(),于是函數(shù)在我還沒(méi)有點(diǎn)擊按鈕時(shí)就進(jìn)行了一次計(jì)算,所以剛開(kāi)始運(yùn)行程序就提醒我輸入不能為空。試了很多方法,才試到這個(gè)方法。在函數(shù)前面加上:“lamba:”。
justify=tk.CENTER設(shè)計(jì)文字在按鈕的中間

a4 = tk.Button(win, text='求和',justify=tk.CENTER, width=10, font=('楷體', 15) ,command = lambda :sum() ) ?# 文本框創(chuàng)建
a4.grid(row=3, column=0)
a5 = tk.Button(win, text='求積', justify=tk.CENTER, width=10 , font=('楷體', 15), command = lambda :multiply()) ?# 文本框創(chuàng)建
a5.grid(row=3, column=1)
a6 = tk.Button(win, text='求差', justify=tk.CENTER, width=10, font=('楷體', 15), command = lambda :subtract()) # 文本框創(chuàng)建
a6.grid(row=4, column=0)
a7 = tk.Button(win, text='求商', justify=tk.CENTER, width=10, font=('楷體', 15), command = lambda :divide()) ?# 文本框創(chuàng)建
a7.grid(row=4, column=1)

附完整代碼:

import tkinter as tk
import tkinter.messagebox
win = tk.Tk() ? ? ? ? #窗口名稱
win.title("簡(jiǎn)易計(jì)算器")
win.geometry('650x600') ?# 這里的乘是小x

b=tk.Label(win, text='簡(jiǎn)易計(jì)算器',justify=tk.CENTER, height=2 , width=50 ,font=('楷體', 20),background='lightcyan') ?# 文本框名字
b.grid(row=0,columnspan=6)

b1=tk.Label(win, text='a:',justify=tk.CENTER, height=2 , width=5 ,font=('楷體', 15)) ?# 文本框名字
b1.grid(row=1,column=0)
a1 = tk.Entry(win, justify=tk.LEFT, width=15 , font=('楷體', 15)) ?# 文本框創(chuàng)建
a1.grid(row=1,column=1)

b2 = tk.Label(win, text='b:',justify=tk.CENTER, height=2 , width=5 , font=('楷體', 15)) ?# 文本框名字
b2.grid(row=2,column=0)
a2 = tk.Entry(win, justify=tk.LEFT, width=15 , font=('楷體', 15) ) ?# 文本框創(chuàng)建
a2.grid(row=2,column=1)


txt = tk.Text(win,height=20, width=40 ,font=('楷體', 15))
txt.grid(row=1,column=4,rowspan=4,columnspan=4)

num=0
def sum():
? ? if a1.get()=='' or a2.get()=='':
? ? ? ? return tkinter.messagebox.showinfo('消息提示', '輸入不能為空')
? ? global num
? ? num += 1
? ? a = float(a1.get())
? ? b = float(a2.get())
? ? c = a + b
? ? s = str('%d'%a + ' + '+'%d'%b + ' = ' + '%d'%c)
? ? if num%2==0:
? ? ? ? s=s+ '\n'
? ? ? ? print(num)
? ? else:
? ? ? ? s=s+'\t'
? ? txt.insert(tk.END,s)
? ? tkinter.messagebox.showinfo('消息提示', '求商結(jié)果是:%d'%c)
? ? a1.delete(0, tk.END)
? ? a2.delete(0, tk.END)

def multiply():
? ? if a1.get()=='' or a2.get()=='':
? ? ? ? return tkinter.messagebox.showinfo('消息提示', '輸入不能為空')
? ? global num
? ? num += 1
? ? a = float(a1.get())
? ? b = float(a2.get())
? ? c = a * b
? ? s = str('%d' % a + ' * ' + '%d' % b + ' = ' + '%d' % c)
? ? if num%2==0:
? ? ? ? s=s+ '\n'
? ? ? ? print(num)
? ? else:
? ? ? ? s=s+'\t'
? ? txt.insert(tk.END, s)
? ? tkinter.messagebox.showinfo('消息提示', '求積結(jié)果是:%d'%c)
? ? a1.delete(0, tk.END)
? ? a2.delete(0, tk.END)
def subtract():
? ? if a1.get()=='' or a2.get()=='':
? ? ? ? return tkinter.messagebox.showinfo('消息提示', '輸入不能為空')
? ? global num
? ? num += 1
? ? a = float(a1.get())
? ? b = float(a2.get())
? ? c = a - b
? ? s = str('%d' % a + ' - ' + '%d' % b + ' = ' + '%d' % c)
? ? if num%2==0:
? ? ? ? s=s+ '\n'
? ? ? ? print(num)
? ? else:
? ? ? ? s=s+'\t'
? ? txt.insert(tk.END, s)
? ? tkinter.messagebox.showinfo('消息提示', '求差結(jié)果是:%d'%c)
? ? a1.delete(0, tk.END)
? ? a2.delete(0, tk.END)
def divide():
? ? if a1.get()=='' or a2.get()=='':
? ? ? ? return tkinter.messagebox.showinfo('消息提示', '輸入不能為空')
? ? global num
? ? num += 1
? ? a = float(a1.get())
? ? b = float(a2.get())
? ? if float(b)==0.0:
? ? ? ? tkinter.messagebox.showinfo('消息提示', '除數(shù)不能為零?。。?)
? ? ? ? a2.delete(0 , tk.END) ?# 刪除文本框內(nèi)索引為0-999的字符
? ? else:
? ? ? ? c = a / b
? ? ? ? s = str('%d' % a + ' / ' + '%d' % b + ' = ' + '%d' % c)
? ? ? ? if num % 2 == 0:
? ? ? ? ? ? s = s + '\n'
? ? ? ? ? ? print(num)
? ? ? ? else:
? ? ? ? ? ? s = s + '\t'
? ? ? ? txt.insert(tk.END, s)
? ? ? ? tkinter.messagebox.showinfo('消息提示', '求商結(jié)果是:%d'%c)
? ? ? ? a1.delete(0, tk.END)
? ? ? ? a2.delete(0, tk.END)
a4 = tk.Button(win, text='求和',justify=tk.CENTER, width=10, font=('楷體', 15) ,command = lambda :sum() ) ?# 文本框創(chuàng)建
a4.grid(row=3, column=0)
a5 = tk.Button(win, text='求積', justify=tk.CENTER, width=10 , font=('楷體', 15), command = lambda :multiply()) ?# 文本框創(chuàng)建
a5.grid(row=3, column=1)
a6 = tk.Button(win, text='求差', justify=tk.CENTER, width=10, font=('楷體', 15), command = lambda :subtract()) # 文本框創(chuàng)建
a6.grid(row=4, column=0)
a7 = tk.Button(win, text='求商', justify=tk.CENTER, width=10, font=('楷體', 15), command = lambda :divide()) ?# 文本框創(chuàng)建
a7.grid(row=4, column=1)
win.mainloop()

本篇博客只實(shí)現(xiàn)了較為簡(jiǎn)單的計(jì)算功能,當(dāng)然也可以設(shè)計(jì)更多的功能,只需要加以研究,就可以完成。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python?random模塊常用函數(shù)基礎(chǔ)教程

    python?random模塊常用函數(shù)基礎(chǔ)教程

    這篇文章主要為大家介紹了python?random模塊常用函數(shù)基礎(chǔ)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Python OpenCV快速入門(mén)教程

    Python OpenCV快速入門(mén)教程

    這篇文章主要介紹了Python OpenCV快速入門(mén)教程,幫助大家更好的利用opencv處理圖像,感興趣的朋友可以了解下
    2021-04-04
  • Python OpenCV學(xué)習(xí)之圖像濾波詳解

    Python OpenCV學(xué)習(xí)之圖像濾波詳解

    圖像濾波的作用簡(jiǎn)單來(lái)說(shuō)就是將一副圖像通過(guò)濾波器得到另一幅圖像;明確一個(gè)概念,濾波器又被稱為卷積核,濾波的過(guò)程又被稱為卷積;實(shí)際上深度學(xué)習(xí)就是訓(xùn)練許多適應(yīng)任務(wù)的濾波器,本質(zhì)上就是得到最佳的參數(shù)。下面來(lái)跟隨小編一起深入了解一下圖像濾波吧
    2022-01-01
  • Python socket實(shí)現(xiàn)的文件下載器功能示例

    Python socket實(shí)現(xiàn)的文件下載器功能示例

    這篇文章主要介紹了Python socket實(shí)現(xiàn)的文件下載器功能,結(jié)合實(shí)例形式分析了Python使用socket模塊實(shí)現(xiàn)的文件下載器客戶端與服務(wù)器端相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • Python中海象運(yùn)算符:=的實(shí)現(xiàn)

    Python中海象運(yùn)算符:=的實(shí)現(xiàn)

    海象運(yùn)算符(:=)是Python3.8引入的新特性,用于在表達(dá)式中同時(shí)完成賦值和返回值操作,本文就來(lái)介紹一下Python中海象運(yùn)算符:=的實(shí)現(xiàn),感興趣的可以了解一下
    2025-02-02
  • Python知識(shí)點(diǎn)詳解之正則表達(dá)式語(yǔ)法

    Python知識(shí)點(diǎn)詳解之正則表達(dá)式語(yǔ)法

    正則表達(dá)式在搜索大型文本、電子郵件和文檔時(shí)非常有用,正則表達(dá)式也稱為"用于字符串匹配的編程語(yǔ)言",下面這篇文章主要給大家介紹了關(guān)于Python知識(shí)點(diǎn)之正則表達(dá)式語(yǔ)法的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • python迭代器與生成器詳解

    python迭代器與生成器詳解

    迭代器和生成器都是Python中特有的概念,迭代器可以看作是一個(gè)特殊的對(duì)象,每次調(diào)用該對(duì)象時(shí)會(huì)返回自身的下一個(gè)元素,從實(shí)現(xiàn)上來(lái)看,一個(gè)可迭代的對(duì)象必須是定義了__iter__()方法的對(duì)象,而一個(gè)迭代器必須是定義了__iter__()方法和next()方法的對(duì)象。
    2016-03-03
  • Python制作簡(jiǎn)單的剪刀石頭布游戲

    Python制作簡(jiǎn)單的剪刀石頭布游戲

    這篇文章主要介紹了Python制作剪刀石頭布游戲的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • PyCharm虛擬環(huán)境中使用pip指令

    PyCharm虛擬環(huán)境中使用pip指令

    本文主要介紹了PyCharm虛擬環(huán)境中使用pip指令,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 使用tensorflow DataSet實(shí)現(xiàn)高效加載變長(zhǎng)文本輸入

    使用tensorflow DataSet實(shí)現(xiàn)高效加載變長(zhǎng)文本輸入

    今天小編就為大家分享一篇使用tensorflow DataSet實(shí)現(xiàn)高效加載變長(zhǎng)文本輸入,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01

最新評(píng)論

长垣县| 平湖市| 内黄县| 运城市| 吴忠市| 长泰县| 宜川县| 江城| 青阳县| 辽阳县| 新丰县| 特克斯县| 鲁山县| 大港区| 炎陵县| 扶风县| 汝南县| 芦山县| 曲沃县| 宜阳县| 临清市| 巧家县| 孝感市| 开封市| 大港区| 射阳县| 金昌市| 密云县| 彭山县| 徐水县| 韶山市| 全州县| 武强县| 淅川县| 吴江市| 镇康县| 禄劝| 抚宁县| 客服| 乐安县| 策勒县|