用 Python 開發實用程序 – 計算器

一段時間前,自己製作了一個庫 “sui-math”。 這其實是 math 的翻版。 做完後,我又想到,python 既然可以輕易的完成任何的數學計算,何不用 python 開發一個小程序專門用以計算呢?

今天就讓我們走進計算器的世界,用 python 來編寫一個可以用的計算器。

廢話不多說,先來看看整體效果

編寫思路

用戶可以通過鼠標或鍵盤來輸入或刪除數字或符號,按下等號便可計算。

本教程藉助 python 的 pygame 庫來實現程序。當然,看完本教程後,你還可以通過利用,pygame 來這製作小遊戲。所以下面稍稍介紹一下 pygame 及其安裝。

入門Python其實很容易,但是我們要去堅持學習,每一天堅持很困難,我相信很多人學了一個星期就放棄了,為什麼呢?其實沒有好的學習資料給你去學習,你們是很難堅持的,這是小編收集的Python入門學習資料關注,轉發,私信小編“01”,即可免費領取!希望對你們有幫助

用 Python 開發實用程序 – 計算器


當然,首先是需要安裝 pygame

<code>pip install -U pygame/<code>

計算器關鍵邏輯

其實邏輯就是不斷地獲取用戶的操作,直到用戶按下 quit 鍵(關閉)。我們可以把這個不斷獲取操作,並不斷的操作做出反應過程叫做:事件處理器。

那怎麼做出一個“事件處理器”呢?其實,就是一個大大的 “while True:” 把從啟動到結束,對用戶所有的操作做出的反應給包起來。這讀起來有點繞口,等會會有詳細的代碼。

如何計算

對於其他的語言來說,計算是個大大的問題。但 python 不同,它有個特殊的內置函數,叫做eval。這個只有四個字母的函數,解決了計算器的運算。

打個比方:現在已經可以獲取用戶所作出的操作,比如說按下符號,或者是數字。但是,怎麼知道用戶會在按下等號前,按下多少個符號和數字呢?用戶有可能按1個數字,也有可能按一百個數字,可能是一個符號,可能是好幾個符號。

因此,不妨設定一個變量,一個空的字串符。

num = ""

每當用戶按下一個數字或者一個符號,就在這個字串符裡增加這個數字和符號。每次按下這個字串符後,就在屏幕裡顯示這個字串符。舉個最簡單的例子:

num += str(1)

word = t.render(num,True,(0,0,0),(225,225,225))

screen.blit(word, (XXX,XXX)) #XXX代表位置

pygame.display.update() #更新屏幕

當用戶按下 ”1” 的時候,num 就會增加字串符1。第2,3行實現了在屏幕上顯示這個字串符。(會在後面詳細解釋)再將屏幕 “更新”。(這行是必須寫的,不然屏幕不會顯示)

當用戶按下等號的,字串符就停止增加,開始計算。Eval 是專門用來計算字串符的,當計算後,將計算好的數字顯示出來,最後將字串符清零。代碼:

a = str(eval(num)) #計算字串符

word = t.render(a,True,(0,0,0),(225,225,225))

screen.blit(word,p)

num = "" #字串符清空

pygame.display.update()

圖片處理

一個簡易的計算器原理已經可以做出來了,但是要讓用戶直觀的看到按鈕,比如按鍵,就需要導入圖片了

Pygame 的圖片可以使用.png的格式,可以自己畫,也可以從網上搜。我就是自己用畫圖板畫的:

用 Python 開發實用程序 – 計算器

Pygame 導入圖片

<code>XXX = pygame.image.load("XXX/XXX.png")/<code>

獲取用戶是否按下這個按鍵需要就是一個if語句,代碼如下:

<code>while True:    one = pygame.image.load("E://XXX/py1.png")    ···    if event.type == pygame.MOUSEBUTTONDOWN:        x, y = pygame.mouse.get_pos()        if XXX <= x <= XXX and XXX <= y <= XXX:  # 1的位置              num += str(1)            word = t.render(num, True, (0, 0, 0), (225, 225, 225))            screen.blit(word, p)            pygame.display.update()/<code>

第五行的 “x”和“y” 是獲取用戶鼠標的位置。

在第六行,前兩個XXX是定位圖片的x軸,後兩個XXX是定位圖片y軸。

其實,你只需定位第一個和第三個位置即可。每張圖片都有寬,長,比如你要對當用戶按下一個長寬都是100的圖片,同時,要將這個代碼定位在,(0,0)的位置,看代碼:

<code>while True:      ···      if event.type==pygame.MOUSEBUTTONDOWN:          x, y = pygame.mouse.get_pos()          if 0 <= x <= 100 and 0 <= y<= 100:                 ···  /<code>

對於一些不知道怎樣得知圖片的長寬的小白,底下有張圖片,

用 Python 開發實用程序 – 計算器

鍵盤處理

先看代碼

<code>while True:      ···       if event.type == KEYDOWN:           if event.key == K_1 or event.key == K_KP1:      #1           num += str(1)           word = t.render(num,True,(0,0,0),(225,225,225))           screen.blit(word,p)           pygame.display.update()  /<code>

pygame 給每一個鍵盤都命名了,比如說,1就是 “K_1”,小鍵盤1就是 “K_KP1”。也就是說,當用戶按下K_1(數字鍵1)這個按鍵的時候,做出反應。

若是想要pygame的鍵盤對印表,請到https://github.com/duoduo666/jisuanba_pygame_jisuanji

這個地址(也是我的github),裡面也有完整的代碼。

Pygame 編程

Pygame 初始化

先配合著註釋閱讀代碼。

<code>import sys                      import pygame  from pygame.locals import *       #pygame裡有許多像pygame.XXX.YYY的形式  def calculater():                            #calculater僅僅是我自己的定義       pygame.init()                             #初始化pygame      screen_size = width,height = XXXX, XXXX   #這個是定義屏幕大小,根據自己電腦做出判斷      screen = pygame.display.set_mode(screen_size)      pygame.display.set_caption("計算器")         #命名         ···                                   #此處放方便自己的初始變量      c = (255,255,255)          #開始的顏色      screen.fill(c)                                     #一開始顯示的東西,比如按鍵,有空還可以自己畫個圖標,等等          screen.blit(X,(XXX,XXX))           #這句話很重要,表示顯示,沒有這句話,不會顯示的             pygame.display.flip()         while True:          #退出處理(當用戶按退出鍵處理)          for event in pygame.event.get():              if event.type == QUIT:                  pygame.quit()                  exit()              ······    #想寫就寫,呵呵/<code>

先導入 pygame 和 sys 兩個庫,接著是 “pygame.init“ 這起到了初始化的作用,根據自己的電腦,定義計算機的長和寬。

Pygame 的顏色是根據紅黃藍三色控制的,每一級最高為255,最低為0。比如(225,225,225)就是白色,(0,0,0)是黑色。

pygame.blit 是 pygame 的顯示圖片,文字的方法。接下來的退出處理其實就是一個事件處理器,不斷地獲取用戶的操作,並對用戶的操作作出反應。

Pygame 文字

做什麼也不能沒有字,比若說,顯示就需要顯示數字。先看代碼

<code>t = pygame.font.SysFont("arial",32)  ··· #想寫就寫,任性  num = "XXX"   #想寫就寫,任性  word = t.render(num,True,(0,0,0),(225,225,225))  screen.blit(word,(XXX,XXX))   #XXX代表位置 /<code>

首先,需要確認字體,所有的電腦都會帶有字體,可以在 Font 文件夾裡找到,這裡就不再多說。

在第六行,這就是確認文字的顏色和底色。(0,0,0)代表著顏色,這裡是黑色,(225,225,225)代表底色,這裡是黑色。最後在(xxx,xxx)的位置顯示出來。

有小白會跳出來問,第六行那個 True 改成 False 會怎麼樣呢。放心,不會發生什麼事,都不會給你顯示了。

Pygame 圖片

說了一堆,寫出程序後,最多顯示出一個白色的屏幕,按鍵顯示不出怎麼行呢?

Pygame 有個函數 blit. 由於顯示其他的內容,剛講了文字,那裡也用到 blit 函數。現在來講圖片的顯示方法

Pygame 所有需要用的圖片都需要先導入,這在前面已經詳細講過,這裡就不再多說。代碼如下:

<code>ad = ("E://XXX/XXX/")   #位置  XXX = pygame.image.load(ad + "XXX.png")     #導入圖片  ···    def pscreen():      screen.fill(225,225,225)      screen.blit(XXX,(300,300))      #位置      ···  /<code>

好了,差不多這個計算器程序的核心就是這些了,要不要一起來動手試試呢!

結語

講完了麼?一些小白覺得看這篇文章太累了,沒有完整的代碼。那建議去

<code>https://github.com/duoduo666/jisuanba_pygame_jisuanji/blob/master/%E4%BB%A3%E7%A0%81.py/<code>

看看完整的代碼(可以直接拿來用)

現在,你應該可以自己做出一個計算器了吧,其實不僅僅是計算器,你還可以用 pygame 來做出任意一個程序,只要肯花費些時間,還可以用 pygame 寫出一個簡易的系統。

若是在使用我寫的計算器的時候,發現 bug,請在 github 的 issue塊 留言,一定會在第一時間回覆的!


分享到:


相關文章: