【導語】:想製做屬於本身的桌面應用程序嗎?這有 15 個示例帶你手把手入門。python
本次將介紹一個用 PyQt 框架和 Python 編寫的 15 個小型桌面應用程序的合集。git
這其中不少應用程序在 learnpyqt 網站上有更詳細的討論。若是你對建立GUI應用程序還不熟悉,能夠查看 pyqt5 入門教程。
這個開源項目的地址是:https://github.com/learnpyqt/...github
這些 app 將展現 Qt 框架的各個部分,包括高級小部件、多媒體、圖形視圖和無裝飾窗口。固然,最有趣/有特點且功能完整的應用是掃雷,紙牌和畫圖。web
要使用這些app,首先須要安裝requirements文件。在大多數狀況下,惟一要安裝的就是PyQt5,偶爾也要安裝其餘依賴。若是要安裝某些app特定的依賴,進入那個app文件夾內運行如下代碼便可:算法
pip3 install -r requirements.txt
安裝完以後,便可用python3來執行sql
python3 <filename>.py
應用程序的窗口就出現了。shell
這是一個用Python和Qt構建的web瀏覽器示例。使用Qt5.6中引入的QtWebEngineWidgets系統,它提供了一個帶有經常使用控件的單窗口瀏覽,以及保存和加載HTML體驗的功能。數據庫
Mozarella Ashbacker是網絡瀏覽領域的最新革命!返回上一頁!打印!保存文件!幫助列表!跟其餘瀏覽器同樣的話純屬巧合。windows
添加選項卡支持使瀏覽器的內部結構變複雜很多,由於咱們如今須要跟蹤當前活動的瀏覽器視圖,既要更新UI元素(URL欄、HTTPs圖標)以更改當前活動窗口中的狀態,又要確保UI事件被調度到正確的web視圖。api
這是經過使用過濾事件的中間槽和添加信號重定向(使用lamba函數使其保持簡短)來實現的。
探索神祕的月球,但不要太接近外星土著哦!
Moonsweeper是一款單人益智遊戲。遊戲的目標是探索你着陸的太空火箭周圍的區域,而不是接近致命的Bug外星人。可信賴的計數儀會告訴你附近的bug(雷)的數量。
這是一個簡單的單人探索遊戲,模仿掃雷船,你必須在不觸及隱藏的地雷的狀況下揭示全部的小方塊。這個小方塊實現是使用定製的QWidget對象,這些對象分別將它們的狀態保存爲mine、status和相鄰的mine計數。在這個版本中,地雷被外星蟲子(Bug)取代,它們也多是其餘任何東西。
在許多掃雷的變種中,初始回合被認爲是一個自由回合:若是你在第一次點擊時擊中一枚地雷,它會被移動到其餘地方。這裏咱們投機取巧了一點,讓第一次嘗試確保它是在一個非地雷的地點。這使咱們沒必要擔憂第一步走得很差致使須要咱們從新計算相鄰。咱們把它解釋爲「圍繞火箭的初步探索」,讓它聽起來挺合理的。
一個很是簡單的記事本克隆,使用QTextEdit小部件來處理。支持文件加載、保存和打印。
一個使用Python在PyQt中實現的簡單計算器應用程序。用戶界面是在Qt設計器中設計的,計算器操做是使用簡單的基於堆棧的邏輯實現的。
這款編輯器是基於記事本的擴展,一樣使用QTextEdit組件 ,但啓用了富文本編輯。
支持多種字體、樣式和段落文本對齊方式。還支持拖放圖像,這些圖像會自動打開並嵌入。
也支持保存和打開HTML格式的文檔。
使用此攝像頭快照應用程序,你能夠拍攝攝像頭當前正在查看的內容的照片。使用QtMultimedia多媒體框架處理與相機的全部交互,並支持多個攝像頭(若是有的話)。
能夠聽音頻和看視頻,內置播放列表的簡單應用程序。使用QtMultimedia和QtMultimediaWidgets處理播放和管理播放列表。
主界面提供了一個播放列表窗口,您能夠在其中拖拽要播放的媒體文件。提供了標準媒體控件,以及時間軸部件和音量控件。
你還能夠彈出一個浮動在頂部的視頻窗口。
使用這個浮動筆記應用程序在桌面上作臨時筆記。註釋存儲在本地SQLite數據庫中。
這個應用程序很是簡單,可是演示了在PyQt中建立無裝飾窗口。刪除窗口裝飾會致使不能拖動窗口,所以咱們必須本身從新實現這種行爲。
用Piecasso來表達本身吧,惟一一個以派的現成圖片爲特點的繪畫程序。
Piecasso是windows95中畫圖程序的一個克隆,在此之上作了一些增減。這個程序的特色是有標準的工具,包括鋼筆,刷子,填充,噴霧罐,橡皮擦,文本和一些形狀。
你能夠複製任何形狀的圖像,但不支持粘貼+浮動。畫布的大小是固定的,加載的圖像會根據須要進行調整。還包括一個圖章工具,其中預裝了美味派的圖片。
全部工具都是用嵌套的事件處理程序實現的,這些處理程序會根據須要轉發事件。這容許在具備共同行爲(例如形狀繪製)的工具之間重複使用大量代碼。添加選擇區域動畫須要一個計時器(更新爬行螞蟻),這增長了一些代碼複雜性。
從性能的角度來看,這是這個應用程序中最棘手的部分。直接檢查像素太慢(整個畫布填充時間約爲10秒)。在Python中實現這一點的大多數代碼都使用numpy,但我不想單獨爲此引入依賴關係。
經過將圖像導出爲bytestring,而後向下採樣到每像素一個布爾字節(用於匹配/不匹配)來簡化比較循環,能夠達到合理的速度。
雖然這個搜索填充算法仍然至關愚蠢。
用一隻貓解壓你的文件。將zip文件拖放到懸空喵咪上,填充它手臂處。按下頭部將會解壓縮你的文件到當前目錄。
當你打開應用程序時,貓咪的手臂處是空的。
只需將.zip文件拖放到貓咪上,就能夠用文件填充它。
按下貓的頭,文件就會解壓了。
從任何語言翻譯(谷歌翻譯支持)到海盜語。它調用了遠程api http://api.funteransations.com 將英語翻譯成海盜語,以及谷歌的一個非官方的Python包裝器將其餘語言翻譯成英語。
to English部分使用基於web界面的Python庫,而不是官方API客戶機,由於沒有必要且客戶端是非免費的。因此應用程序的這一部分不能保證100%工做。
to Pirate部分使用了一個受嚴重限制的公共API。你大概只能免費翻譯5次就被限制了。你能夠花錢買一個API密鑰來解除限制。
因此總結下來,這個程序用處不大。
獲取每日天氣和15小時預報。數據來自免費的天氣預報API https://openweathermap.org/
這是一個用PyQt實現的簡單的貨幣匯率跟蹤器,數據來自fixer.io API。默認設置顯示前180天的貨幣數據。
它會逐步加載數據,分辨率不斷提升。給定日期的匯率顯示在右側面板中,並根據鼠標位置進行更新。
該界面顯示了過去180天的費率跟蹤圖(使用PyQtGraph)。因爲咱們不想向免費服務發垃圾郵件,因此對API的請求速率被限制爲每秒1次,所以完整的數據加載時間爲180秒(3分鐘)。
爲了不每次等待,咱們使用requests_cache方法,它使用本地sqlite數據庫來存儲最近請求的結果。對數據的請求使用一種漸進的「搜索」方法:若是數據中存在缺口,則首先填充中間點,而且它更傾向於首先加載最近的時間點。這意味着隨着時間的推移,整個情節的分辨率會逐漸提升,而不是隻提升缺口以後的。
默認狀況下,應用程序檢索的是歐元匯率,並顯示到該基礎貨幣的換算。若是您更改基礎貨幣,它將再次檢索該新貨幣的全部數據。這個行爲稍微有點愚蠢,由於若是咱們有對歐元的匯率,咱們能夠經過歐元計算任何其餘貨幣->貨幣轉換(損失一點點準確性)。
經典的紙牌遊戲。遊戲跟紙牌在其餘方面是相同的,提供相同的選項。它由PyQt構建,使用QGraphicsScene來處理遊戲區域。
經典的紙牌獲勝屏幕也實現了,儘管因爲播放畫布不是位圖,因此不會「填滿」。但仍然足夠使人滿意。
配置選項容許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 等。