欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python制作簡易計算器功能

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

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

簡易計算器

簡易計算器功能:

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

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

窗口

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

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

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

布局

標題

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

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

輸入框

輸入框a1,a2使用的是Entry,前面的名字使用的是Label標簽
justify表示文字的位置,或者輸入文字的起始位置是從那一邊開始,有左和右,
width和height,代表寬度和高度
font,里面包含楷體和字號,這個可以不寫,有默認值。
grid顯示布局的位置,行列號。row,column分別代表行和列,rowspan,columnspan代表行列方向上占據(jù)的大小
通過輸入框名字.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)

文本記錄框

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

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

按鈕功能

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

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

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

num=0?? ??#用來記錄歷史計算次數(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)容,收集到的為字符型,需要進行轉(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ù)個算式后面加上空格進行間隔
? ? ? ? print(num)
? ? else:
? ? ? ? s=s+'\t'?? ??? ??? ?#第奇數(shù)個算式進行換行處理
? ? 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) ?# 當除數(shù)為0時,不能進行計算,并且需要彈窗提示,清空數(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)

按鈕

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

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("簡易計算器")
win.geometry('650x600') ?# 這里的乘是小x

b=tk.Label(win, text='簡易計算器',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()

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python3中的多行輸入問題

    Python3中的多行輸入問題

    這篇文章主要介紹了Python3中的多行輸入問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Python下載ts文件視頻且合并的操作方法

    Python下載ts文件視頻且合并的操作方法

    ts文件,ts即"Transport?Stream"的縮寫,特點就是要求從視頻流的任一片段開始都是可以獨立解碼的,非常適合網(wǎng)絡視頻播放,這篇文章主要介紹了Python下載ts文件視頻且合并,需要的朋友可以參考下
    2023-01-01
  • python hook監(jiān)聽事件詳解

    python hook監(jiān)聽事件詳解

    這篇文章主要為大家詳細介紹了python hook監(jiān)聽事件的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Python中處理表格數(shù)據(jù)的Tablib庫詳解

    Python中處理表格數(shù)據(jù)的Tablib庫詳解

    這篇文章主要介紹了Python中處理表格數(shù)據(jù)的Tablib庫詳解,Tablib 是一個 MIT 許可的格式不可知的表格數(shù)據(jù)集庫,用 Python 編寫,它允許您導入、導出和操作表格數(shù)據(jù)集,需要的朋友可以參考下
    2023-08-08
  • Python中可變和不可變對象的深入講解

    Python中可變和不可變對象的深入講解

    python與C/C++不一樣,它的變量使用有自己的特點,學python的時候一定要記住一切皆為對象,一切皆為對象的引用,這篇文章主要給大家介紹了關于Python中可變和不可變對象的相關資料,需要的朋友可以參考下
    2021-07-07
  • Python內(nèi)存泄漏和內(nèi)存溢出的解決方案

    Python內(nèi)存泄漏和內(nèi)存溢出的解決方案

    這篇文章主要介紹了Python內(nèi)存泄漏和內(nèi)存溢出的解決方案,幫助大家維護后臺進程,感興趣的朋友可以了解下
    2020-09-09
  • 關于jupyter打開之后不能直接跳轉(zhuǎn)到瀏覽器的解決方式

    關于jupyter打開之后不能直接跳轉(zhuǎn)到瀏覽器的解決方式

    這篇文章主要介紹了關于jupyter打開之后不能直接跳轉(zhuǎn)到瀏覽器的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 解決django中ModelForm多表單組合的問題

    解決django中ModelForm多表單組合的問題

    今天小編就為大家分享一篇解決django中ModelForm多表單組合的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python定時按日期備份MySQL數(shù)據(jù)并壓縮

    python定時按日期備份MySQL數(shù)據(jù)并壓縮

    這篇文章主要為大家詳細介紹了python定時按日期備份MySQL數(shù)據(jù)并壓縮,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Python正則匹配判斷手機號是否合法的方法

    Python正則匹配判斷手機號是否合法的方法

    今天小編就為大家分享一篇Python正則匹配判斷手機號是否合法的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12

最新評論