15 個開源示例手把手帶你用 PyQt 作小型桌面應用

【導語】:想製做屬於本身的桌面應用程序嗎?這有 15 個示例帶你手把手入門。python

簡介

本次將介紹一個用 PyQt 框架和 Python 編寫的 15 個小型桌面應用程序的合集。git

這其中不少應用程序在 learnpyqt 網站上有更詳細的討論。若是你對建立GUI應用程序還不熟悉,能夠查看 pyqt5 入門教程

這個開源項目的地址是:https://github.com/learnpyqt/...github

App列表

這些 app 將展現 Qt 框架的各個部分,包括高級小部件、多媒體、圖形視圖和無裝飾窗口。固然,最有趣/有特點且功能完整的應用是掃雷,紙牌和畫圖。web

  1. 網絡瀏覽器(無選項卡)-「MooseAche」
  2. 網絡瀏覽器(選項卡)-「Mozzarella Ashbacker」
  3. 掃雷-「Moonsweeper」
  4. 記事本-「No2Pads」
  5. 計算器-「Calculon」(QtDesigner)
  6. 文本編輯器-「Megasolid Idiom」
  7. 攝像頭/快照-「NSAViewer」
  8. 播放器-「Failamp」
  9. 便箋-「Brown Note」(QtDesigner)
  10. 畫圖-「Piecasso」(QtDesigner)
  11. 解壓縮-「7Pez」(QtDesigner)
  12. 翻譯-「Translataarrr」(QtDesigner)
  13. 天氣-「Raindar」(QtDesigner)
  14. 貨幣轉換器-「Doughnut」(PyQtGraph)
  15. 單人紙牌-「Ronery」(qgraphicscene)

安裝使用

要使用這些app,首先須要安裝requirements文件。在大多數狀況下,惟一要安裝的就是PyQt5,偶爾也要安裝其餘依賴。若是要安裝某些app特定的依賴,進入那個app文件夾內運行如下代碼便可:算法

shell代碼

pip3 install -r requirements.txt

安裝完以後,便可用python3來執行sql

python3 <filename>.py

應用程序的窗口就出現了。shell

詳細介紹

一、網絡瀏覽器(無選項卡)

Mooseache:瀏覽器發明之初,它會是什麼樣子?

這是一個用Python和Qt構建的web瀏覽器示例。使用Qt5.6中引入的QtWebEngineWidgets系統,它提供了一個帶有經常使用控件的單窗口瀏覽,以及保存和加載HTML體驗的功能。數據庫

MooseAche

二、網絡瀏覽器(選項卡)

Mozzarella Ashbadger:使用選項卡升級你的瀏覽體驗

Mozarella Ashbacker是網絡瀏覽領域的最新革命!返回上一頁!打印!保存文件!幫助列表!跟其餘瀏覽器同樣的話純屬巧合。windows

Mozzarella Ashbadger

代碼註釋

選項卡

添加選項卡支持使瀏覽器的內部結構變複雜很多,由於咱們如今須要跟蹤當前活動的瀏覽器視圖,既要更新UI元素(URL欄、HTTPs圖標)以更改當前活動窗口中的狀態,又要確保UI事件被調度到正確的web視圖。api

這是經過使用過濾事件的中間槽和添加信號重定向(使用lamba函數使其保持簡短)來實現的。

三、掃雷

Moonsweeper:用pyqt來克隆一艘掃雷艇,和外星人在月球上鬥智鬥勇。

探索神祕的月球,但不要太接近外星土著哦!

Moonsweeper是一款單人益智遊戲。遊戲的目標是探索你着陸的太空火箭周圍的區域,而不是接近致命的Bug外星人。可信賴的計數儀會告訴你附近的bug(雷)的數量。

Moonsweeper1

這是一個簡單的單人探索遊戲,模仿掃雷船,你必須在不觸及隱藏的地雷的狀況下揭示全部的小方塊。這個小方塊實現是使用定製的QWidget對象,這些對象分別將它們的狀態保存爲mine、status和相鄰的mine計數。在這個版本中,地雷被外星蟲子(Bug)取代,它們也多是其餘任何東西。

Moonsweeper2

代碼註釋

第一回合設計

在許多掃雷的變種中,初始回合被認爲是一個自由回合:若是你在第一次點擊時擊中一枚地雷,它會被移動到其餘地方。這裏咱們投機取巧了一點,讓第一次嘗試確保它是在一個非地雷的地點。這使咱們沒必要擔憂第一步走得很差致使須要咱們從新計算相鄰。咱們把它解釋爲「圍繞火箭的初步探索」,讓它聽起來挺合理的。

四、記事本

No2Pads:用PyQt寫的記事本

一個很是簡單的記事本克隆,使用QTextEdit小部件來處理。支持文件加載、保存和打印。

No2Pads

五、計算器

Calculon:用PyQt寫的桌面計算器

一個使用Python在PyQt中實現的簡單計算器應用程序。用戶界面是在Qt設計器中設計的,計算器操做是使用簡單的基於堆棧的邏輯實現的。

Calculon

六、文本編輯器

Megasolid-Idiom-用PyQt寫的富文本編輯器

這款編輯器是基於記事本的擴展,一樣使用QTextEdit組件 ,但啓用了富文本編輯。

支持多種字體、樣式和段落文本對齊方式。還支持拖放圖像,這些圖像會自動打開並嵌入。

也支持保存和打開HTML格式的文檔。

七、攝像頭

NSAViewer-有人正看着你

使用此攝像頭快照應用程序,你能夠拍攝攝像頭當前正在查看的內容的照片。使用QtMultimedia多媒體框架處理與相機的全部交互,並支持多個攝像頭(若是有的話)。

八、播放器

Failamp-用PyQt打造簡單的播放器

能夠聽音頻和看視頻,內置播放列表的簡單應用程序。使用QtMultimedia和QtMultimediaWidgets處理播放和管理播放列表。

主界面提供了一個播放列表窗口,您能夠在其中拖拽要播放的媒體文件。提供了標準媒體控件,以及時間軸部件和音量控件。

你還能夠彈出一個浮動在頂部的視頻窗口。

九、便箋

Brown Note—PyQt中的桌面便箋應用程序

使用這個浮動筆記應用程序在桌面上作臨時筆記。註釋存儲在本地SQLite數據庫中。

這個應用程序很是簡單,可是演示了在PyQt中建立無裝飾窗口。刪除窗口裝飾會致使不能拖動窗口,所以咱們必須本身從新實現這種行爲。

十、畫圖

Piecasso-PyQt中的桌面繪畫應用程序

用Piecasso來表達本身吧,惟一一個以派的現成圖片爲特點的繪畫程序。
Piecasso是windows95中畫圖程序的一個克隆,在此之上作了一些增減。這個程序的特色是有標準的工具,包括鋼筆,刷子,填充,噴霧罐,橡皮擦,文本和一些形狀。

你能夠複製任何形狀的圖像,但不支持粘貼+浮動。畫布的大小是固定的,加載的圖像會根據須要進行調整。還包括一個圖章工具,其中預裝了美味派的圖片。

代碼註釋

事件處理

全部工具都是用嵌套的事件處理程序實現的,這些處理程序會根據須要轉發事件。這容許在具備共同行爲(例如形狀繪製)的工具之間重複使用大量代碼。添加選擇區域動畫須要一個計時器(更新爬行螞蟻),這增長了一些代碼複雜性。

染色法

從性能的角度來看,這是這個應用程序中最棘手的部分。直接檢查像素太慢(整個畫布填充時間約爲10秒)。在Python中實現這一點的大多數代碼都使用numpy,但我不想單獨爲此引入依賴關係。

經過將圖像導出爲bytestring,而後向下採樣到每像素一個布爾字節(用於匹配/不匹配)來簡化比較循環,能夠達到合理的速度。

雖然這個搜索填充算法仍然至關愚蠢。

十一、解壓縮

7Pez-有史以來最好/最差的解壓應用程序

用一隻貓解壓你的文件。將zip文件拖放到懸空喵咪上,填充它手臂處。按下頭部將會解壓縮你的文件到當前目錄。

當你打開應用程序時,貓咪的手臂處是空的。

只需將.zip文件拖放到貓咪上,就能夠用文件填充它。

按下貓的頭,文件就會解壓了。

十二、翻譯

Translatarrrr-從任何語言到海盜語的即時翻譯

從任何語言翻譯(谷歌翻譯支持)到海盜語。它調用了遠程api http://api.funteransations.com 將英語翻譯成海盜語,以及谷歌的一個非官方的Python包裝器將其餘語言翻譯成英語。

Translatarrrr1

to English部分使用基於web界面的Python庫,而不是官方API客戶機,由於沒有必要且客戶端是非免費的。因此應用程序的這一部分不能保證100%工做。

Translatarrrr2

to Pirate部分使用了一個受嚴重限制的公共API。你大概只能免費翻譯5次就被限制了。你能夠花錢買一個API密鑰來解除限制。

因此總結下來,這個程序用處不大。

1三、天氣

Raindar-PyQt內置的天氣預報應用程序

獲取每日天氣和15小時預報。數據來自免費的天氣預報API https://openweathermap.org/

Raindar

1四、貨幣轉換器

Doughnut-用PyQt實現的一個匯率追蹤器

這是一個用PyQt實現的簡單的貨幣匯率跟蹤器,數據來自fixer.io API。默認設置顯示前180天的貨幣數據。

Doughnut1

它會逐步加載數據,分辨率不斷提升。給定日期的匯率顯示在右側面板中,並根據鼠標位置進行更新。

Doughnut2

代碼註釋

數據處理

該界面顯示了過去180天的費率跟蹤圖(使用PyQtGraph)。因爲咱們不想向免費服務發垃圾郵件,因此對API的請求速率被限制爲每秒1次,所以完整的數據加載時間爲180秒(3分鐘)。

爲了不每次等待,咱們使用requests_cache方法,它使用本地sqlite數據庫來存儲最近請求的結果。對數據的請求使用一種漸進的「搜索」方法:若是數據中存在缺口,則首先填充中間點,而且它更傾向於首先加載最近的時間點。這意味着隨着時間的推移,整個情節的分辨率會逐漸提升,而不是隻提升缺口以後的。

轉換

默認狀況下,應用程序檢索的是歐元匯率,並顯示到該基礎貨幣的換算。若是您更改基礎貨幣,它將再次檢索該新貨幣的全部數據。這個行爲稍微有點愚蠢,由於若是咱們有對歐元的匯率,咱們能夠經過歐元計算任何其餘貨幣->貨幣轉換(損失一點點準確性)。

1五、單人紙牌

Ronery-PyQt中的紙牌遊戲

經典的紙牌遊戲。遊戲跟紙牌在其餘方面是相同的,提供相同的選項。它由PyQt構建,使用QGraphicsScene來處理遊戲區域。

Ronery1

經典的紙牌獲勝屏幕也實現了,儘管因爲播放畫布不是位圖,因此不會「填滿」。但仍然足夠使人滿意。

Ronery2

配置選項容許1次發1張或3張,容許三、5或無限輪。

代碼註釋

卡片處理

這裏使用的方法是將每一個能夠放置卡片的地方做爲一個「堆棧」對象來處理它當前持有的卡片。每一個堆棧負責其堆棧上卡片的佈局。

堆棧還負責接受/拒絕嘗試在其上放置卡的行爲。有些堆棧,如交易堆不接受任何降牌。其餘的特殊堆有特定的規則。

在大多數狀況下,除了底部的「在玩」牌堆外,牌堆上的任何牌都沒有聯繫。底部的卡片具備父子關係,容許一次拖動多張卡片。

結束動畫

最後的結束動畫是獨立的,而且發生在比賽時間以外,因此第一個想法是有一個單獨的假事件循環,使用QApplication.processEvents勾選。但那實現起來有點噁心。

相反,動畫是由QTimer處理的,QTimer一般在播放過程當中處於空閒狀態,一旦被觸發就會反覆ping一個動畫前進投放。這會移動卡片(僞裝是「重力」,反彈)以及在它們離開遊戲區域後從新堆疊它們。使用正常的堆疊代碼就能夠實現從新堆疊,這樣它們就能夠堆積起來。最後一個難題是阻止用戶的交互,不然卡片仍然能夠被抓取和丟棄。實現這一點的最簡單方法是在整個窗口上放置一個對象,該對象被設置爲捕獲(並放棄)全部鼠標單擊。

最後,想建立本身的應用程序嗎?

若是你以爲這些 app 有些太過簡潔,但願瞭解更多關於 PyQt 的信息,請參閱 PyQt5 教程,它涵蓋了使用PyQt構建app從前到後所需的全部知識。

你也能夠在這個網站上找到關於這些「小型app」的評論。

擴展

若是你想了解更多,能夠移步這裏觀看更多的官方示例:https://diagrams.mingrammer.c...

開源前哨 平常分享熱門、有趣和實用的開源項目。參與維護 10萬+ Star 的開源技術資源庫,包括:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等。
相關文章
相關標籤/搜索