溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

python 使用GUI實(shí)現(xiàn)計(jì)算器功能

發(fā)布時(shí)間:2020-10-28 18:18:57 來(lái)源:億速云 閱讀:796 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

本篇文章為大家展示了python 使用GUI實(shí)現(xiàn)計(jì)算器功能,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

01 實(shí)現(xiàn)

我們幾乎每個(gè)人都用過(guò)計(jì)算器,大家對(duì)于計(jì)算器應(yīng)該都是比較熟悉的,計(jì)算器整體也是比較簡(jiǎn)單的,主要包括:顯示器、鍵盤(pán)、運(yùn)算的邏輯處理等,計(jì)算器的圖形界面我們使用 tkinter 庫(kù)實(shí)現(xiàn),下面看一下具體實(shí)現(xiàn)過(guò)程。

首先,我們畫(huà)一個(gè)主窗口,代碼實(shí)現(xiàn)如下:

# 創(chuàng)建主窗口
tk = tkinter.Tk()
# 設(shè)置窗口大小和位置
tk.geometry('300x210+500+200')
# 不允許改變窗口大小
tk.resizable(False, False)
# 設(shè)置窗口標(biāo)題
tk.title('計(jì)算器')

看一下效果:

python 使用GUI實(shí)現(xiàn)計(jì)算器功能

我們接著畫(huà)顯示器,代碼實(shí)現(xiàn)如下:

# 自動(dòng)刷新字符串變量,可用 set 和 get 方法進(jìn)行傳值和取值
contentVar = tkinter.StringVar(tk, '')
# 創(chuàng)建單行文本框
contentEntry = tkinter.Entry(tk, textvariable=contentVar)
# 設(shè)置文本框?yàn)橹蛔x
contentEntry['state'] = 'readonly'
# 設(shè)置文本框坐標(biāo)及寬高
contentEntry.place(x=20, y=10, width=260, height=30)

看一下效果:

python 使用GUI實(shí)現(xiàn)計(jì)算器功能

再接著畫(huà)鍵盤(pán),代碼實(shí)現(xiàn)如下:

# 按鈕顯示內(nèi)容
bvalue = ['C', '+', '-', '//', '2', '0', '1', '√', '3', '4', '5', '*', '6', '7', '8', '.', '9', '/', '**', '=']
index = 0
# 將按鈕進(jìn)行 5x4 放置
for row in range(5):
  for col in range(4):
    d = bvalue[index]
    index += 1
    btnDigit = tkinter.Button(tk, text=d, command=lambda x=d: onclick(x))
    btnDigit.place(x=20 + col * 70, y=50 + row * 30, width=50, height=20)

看一下效果:

python 使用GUI實(shí)現(xiàn)計(jì)算器功能

界面畫(huà)完了,我們看一下處理運(yùn)算邏輯的代碼,如下所示:

# 點(diǎn)擊事件
def onclick(btn):
  # 運(yùn)算符
  operation = ('+', '-', '*', '/', '**', '//')
  # 獲取文本框中的內(nèi)容
  content = contentVar.get()
  # 如果已有內(nèi)容是以小數(shù)點(diǎn)開(kāi)頭的,在前面加 0
  if content.startswith('.'):
    content = '0' + content # 字符串可以直接用+來(lái)增加字符
  # 根據(jù)不同的按鈕作出不同的反應(yīng)
  if btn in '0123456789':
    # 按下 0-9 在 content 中追加
    content += btn
  elif btn == '.':
    # 將 content 從 +-*/ 這些字符的地方分割開(kāi)來(lái)
    lastPart = re.split(r'\+|-|\*|/', content)[-1]
    if '.' in lastPart:
      # 信息提示對(duì)話(huà)框
      tkinter.messagebox.showerror('錯(cuò)誤', '重復(fù)出現(xiàn)的小數(shù)點(diǎn)')
      return
    else:
      content += btn
  elif btn == 'C':
    # 清除文本框
    content = ''
  elif btn == '=':
    try:
      # 對(duì)輸入的表達(dá)式求值
      content = str(eval(content))
    except:
      tkinter.messagebox.showerror('錯(cuò)誤', '表達(dá)式有誤')
      return
  elif btn in operation:
    if content.endswith(operation):
      tkinter.messagebox.showerror('錯(cuò)誤', '不允許存在連續(xù)運(yùn)算符')
      return
    content += btn
  elif btn == '√':
    # 從 . 處分割存入 n,n 是一個(gè)列表
    n = content.split('.')
    # 如果列表中所有的都是數(shù)字,就是為了檢查表達(dá)式是不是正確的
    if all(map(lambda x: x.isdigit(), n)):
      content = eval(content) ** 0.5
    else:
      tkinter.messagebox.showerror('錯(cuò)誤', '表達(dá)式錯(cuò)誤')
      return
  # 將結(jié)果顯示到文本框中
  contentVar.set(content)

整體實(shí)現(xiàn)完了之后,我們來(lái)演示一下,看一下效果:

python 使用GUI實(shí)現(xiàn)計(jì)算器功能

是不是有內(nèi)味了。

02 打包

為了更加方便的使用,我們可以將 Python 代碼打包成 exe 文件,打包我們使用 pyinstaller,安裝用 pip install pyinstaller 命令即可。

打包時(shí)我們使用 pyinstaller --onefile --nowindowed counter.py 命令即可,此時(shí)打包生成的文件是使用的默認(rèn)圖標(biāo),如果我們想指定自己的圖標(biāo)可以添加參數(shù) --icon="xxx\xxx.ico",打包生成的文件在 dist 目錄。

如下圖所示:

python 使用GUI實(shí)現(xiàn)計(jì)算器功能

此時(shí),我們直接運(yùn)行 exe 文件就行了。

上述內(nèi)容就是python 使用GUI實(shí)現(xiàn)計(jì)算器功能,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI