<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          15 個(gè) Python 開源項(xiàng)目,使用 PyQt 做小型桌面應(yīng)用!

          共 6623字,需瀏覽 14分鐘

           ·

          2021-03-14 17:14


           △點(diǎn)擊上方“Python貓”關(guān)注 ,回復(fù)“2”加入交流群

          【導(dǎo)語】:想制作屬于自己的桌面應(yīng)用程序嗎?這有 15 個(gè)示例帶你手把手入門。

          簡介

          本次將介紹一個(gè)用 PyQt 框架和 Python 編寫的 15 個(gè)小型桌面應(yīng)用程序的合集。

          這其中很多應(yīng)用程序在 learnpyqt 網(wǎng)站[1]上有更詳細(xì)的討論。如果你對(duì)創(chuàng)建GUI應(yīng)用程序還不熟悉,可以查看 pyqt5 入門教程[2]

          這些開源示例在這里:

          https://github.com/learnpyqt/15-minute-apps

          App列表

          這些 app 將展示 Qt 框架的各個(gè)部分,包括高級(jí)小部件、多媒體、圖形視圖和無裝飾窗口。當(dāng)然,最有趣/有特色且功能完整的應(yīng)用是掃雷,紙牌和畫圖。

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

          安裝使用

          要使用這些app,首先需要安裝requirements文件。在大多數(shù)情況下,唯一要安裝的就是PyQt5,偶爾也要安裝其他依賴。如果要安裝某些app特定的依賴,進(jìn)入那個(gè)app文件夾內(nèi)運(yùn)行以下代碼即可:

          shell代碼

          pip3 install -r requirements.txt

          安裝完之后,即可用python3來執(zhí)行

          python3 <filename>.py

          應(yīng)用程序的窗口就出現(xiàn)了。

          詳細(xì)介紹

          1、網(wǎng)絡(luò)瀏覽器(無選項(xiàng)卡)

          Mooseache:瀏覽器發(fā)明之初,它會(huì)是什么樣子?

          這是一個(gè)用Python和Qt構(gòu)建的web瀏覽器示例。使用Qt5.6中引入的QtWebEngineWidgets系統(tǒng),它提供了一個(gè)帶有常用控件的單窗口瀏覽,以及保存和加載HTML體驗(yàn)的功能。

          MooseAche

          2、網(wǎng)絡(luò)瀏覽器(選項(xiàng)卡)

          Mozzarella Ashbadger:使用選項(xiàng)卡升級(jí)你的瀏覽體驗(yàn)

          Mozarella Ashbacker是網(wǎng)絡(luò)瀏覽領(lǐng)域的最新革命!返回上一頁!打印!保存文件!幫助列表!跟其他瀏覽器一樣的話純屬巧合。

          Mozzarella Ashbadger

          代碼注釋

          選項(xiàng)卡

          添加選項(xiàng)卡支持使瀏覽器的內(nèi)部結(jié)構(gòu)變復(fù)雜不少,因?yàn)槲覀儸F(xiàn)在需要跟蹤當(dāng)前活動(dòng)的瀏覽器視圖,既要更新UI元素(URL欄、HTTPs圖標(biāo))以更改當(dāng)前活動(dòng)窗口中的狀態(tài),又要確保UI事件被調(diào)度到正確的web視圖。

          這是通過使用過濾事件的中間槽和添加信號(hào)重定向(使用lamba函數(shù)使其保持簡短)來實(shí)現(xiàn)的。

          3、掃雷

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

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

          Moonsweeper是一款單人益智游戲。游戲的目標(biāo)是探索你著陸的太空火箭周圍的區(qū)域,而不是接近致命的Bug外星人。可信賴的計(jì)數(shù)儀會(huì)告訴你附近的bug(雷)的數(shù)量。

          Moonsweeper1

          這是一個(gè)簡單的單人探索游戲,模仿掃雷船,你必須在不觸及隱藏的地雷的情況下揭示所有的小方塊。這個(gè)小方塊實(shí)現(xiàn)是使用定制的QWidget對(duì)象,這些對(duì)象分別將它們的狀態(tài)保存為mine、status和相鄰的mine計(jì)數(shù)。在這個(gè)版本中,地雷被外星蟲子(Bug)取代,它們也可能是其他任何東西。

          Moonsweeper2

          代碼注釋

          第一回合設(shè)計(jì)

          在許多掃雷的變種中,初始回合被認(rèn)為是一個(gè)自由回合:如果你在第一次點(diǎn)擊時(shí)擊中一枚地雷,它會(huì)被移動(dòng)到其他地方。這里我們投機(jī)取巧了一點(diǎn),讓第一次嘗試確保它是在一個(gè)非地雷的地點(diǎn)。這使我們不必?fù)?dān)心第一步走得不好導(dǎo)致需要我們重新計(jì)算相鄰。我們把它解釋為“圍繞火箭的初步探索”,讓它聽起來挺合理的。

          4、記事本

          No2Pads:用PyQt寫的記事本

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

          No2Pads

          5、計(jì)算器

          Calculon:用PyQt寫的桌面計(jì)算器

          一個(gè)使用Python在PyQt中實(shí)現(xiàn)的簡單計(jì)算器應(yīng)用程序。用戶界面是在Qt設(shè)計(jì)器中設(shè)計(jì)的,計(jì)算器操作是使用簡單的基于堆棧的邏輯實(shí)現(xiàn)的。

          Calculon

          6、文本編輯器

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

          這款編輯器是基于記事本的擴(kuò)展,同樣使用QTextEdit組件 ,但啟用了富文本編輯。

          支持多種字體、樣式和段落文本對(duì)齊方式。還支持拖放圖像,這些圖像會(huì)自動(dòng)打開并嵌入。

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

          7、攝像頭

          NSAViewer-有人正看著你

          使用此攝像頭快照應(yīng)用程序,你可以拍攝攝像頭當(dāng)前正在查看的內(nèi)容的照片。使用QtMultimedia多媒體框架處理與相機(jī)的所有交互,并支持多個(gè)攝像頭(如果有的話)。

          8、播放器

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

          可以聽音頻和看視頻,內(nèi)置播放列表的簡單應(yīng)用程序。使用QtMultimedia和QtMultimediaWidgets處理播放和管理播放列表。

          主界面提供了一個(gè)播放列表窗口,您可以在其中拖拽要播放的媒體文件。提供了標(biāo)準(zhǔn)媒體控件,以及時(shí)間軸部件和音量控件。

          你還可以彈出一個(gè)浮動(dòng)在頂部的視頻窗口。

          9、便箋

          Brown Note—PyQt中的桌面便箋應(yīng)用程序

          使用這個(gè)浮動(dòng)筆記應(yīng)用程序在桌面上做臨時(shí)筆記。注釋存儲(chǔ)在本地SQLite數(shù)據(jù)庫中。

          這個(gè)應(yīng)用程序非常簡單,但是演示了在PyQt中創(chuàng)建無裝飾窗口。刪除窗口裝飾會(huì)導(dǎo)致不能拖動(dòng)窗口,因此我們必須自己重新實(shí)現(xiàn)這種行為。

          10、畫圖

          Piecasso-PyQt中的桌面繪畫應(yīng)用程序

          用Piecasso來表達(dá)自己吧,唯一一個(gè)以派的現(xiàn)成圖片為特色的繪畫程序。Piecasso是windows95中畫圖程序的一個(gè)克隆,在此之上做了一些增減。這個(gè)程序的特點(diǎn)是有標(biāo)準(zhǔn)的工具,包括鋼筆,刷子,填充,噴霧罐,橡皮擦,文本和一些形狀。

          你可以復(fù)制任何形狀的圖像,但不支持粘貼+浮動(dòng)。畫布的大小是固定的,加載的圖像會(huì)根據(jù)需要進(jìn)行調(diào)整。還包括一個(gè)圖章工具,其中預(yù)裝了美味派的圖片。

          代碼注釋

          事件處理

          所有工具都是用嵌套的事件處理程序?qū)崿F(xiàn)的,這些處理程序會(huì)根據(jù)需要轉(zhuǎn)發(fā)事件。這允許在具有共同行為(例如形狀繪制)的工具之間重復(fù)使用大量代碼。添加選擇區(qū)域動(dòng)畫需要一個(gè)計(jì)時(shí)器(更新爬行螞蟻),這增加了一些代碼復(fù)雜性。

          染色法

          從性能的角度來看,這是這個(gè)應(yīng)用程序中最棘手的部分。直接檢查像素太慢(整個(gè)畫布填充時(shí)間約為10秒)。在Python中實(shí)現(xiàn)這一點(diǎn)的大多數(shù)代碼都使用numpy,但我不想單獨(dú)為此引入依賴關(guān)系。

          通過將圖像導(dǎo)出為bytestring,然后向下采樣到每像素一個(gè)布爾字節(jié)(用于匹配/不匹配)來簡化比較循環(huán),可以達(dá)到合理的速度。

          雖然這個(gè)搜索填充算法仍然相當(dāng)愚蠢。

          11、解壓縮

          7Pez-有史以來最好/最差的解壓應(yīng)用程序

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

          當(dāng)你打開應(yīng)用程序時(shí),貓咪的手臂處是空的。

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

          按下貓的頭,文件就會(huì)解壓了。

          12、翻譯

          Translatarrrr-從任何語言到海盜語的即時(shí)翻譯

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

          Translatarrrr1

          to English部分使用基于web界面的Python庫,而不是官方API客戶機(jī),因?yàn)闆]有必要且客戶端是非免費(fèi)的。所以應(yīng)用程序的這一部分不能保證100%工作。

          Translatarrrr2

          to Pirate部分使用了一個(gè)受嚴(yán)重限制的公共API。你大概只能免費(fèi)翻譯5次就被限制了。你可以花錢買一個(gè)API密鑰來解除限制。

          所以總結(jié)下來,這個(gè)程序用處不大。

          13、天氣

          Raindar-PyQt內(nèi)置的天氣預(yù)報(bào)應(yīng)用程序

          獲取每日天氣和15小時(shí)預(yù)報(bào)。數(shù)據(jù)來自免費(fèi)的天氣預(yù)報(bào)API https://openweathermap.org/

          Raindar

          14、貨幣轉(zhuǎn)換器

          Doughnut-用PyQt實(shí)現(xiàn)的一個(gè)匯率追蹤器

          這是一個(gè)用PyQt實(shí)現(xiàn)的簡單的貨幣匯率跟蹤器,數(shù)據(jù)來自fixer.io[18] API。默認(rèn)設(shè)置顯示前180天的貨幣數(shù)據(jù)。

          Doughnut1

          它會(huì)逐步加載數(shù)據(jù),分辨率不斷提高。給定日期的匯率顯示在右側(cè)面板中,并根據(jù)鼠標(biāo)位置進(jìn)行更新。

          Doughnut2

          代碼注釋

          數(shù)據(jù)處理

          該界面顯示了過去180天的費(fèi)率跟蹤圖(使用PyQtGraph)。由于我們不想向免費(fèi)服務(wù)發(fā)垃圾郵件,所以對(duì)API的請(qǐng)求速率被限制為每秒1次,因此完整的數(shù)據(jù)加載時(shí)間為180秒(3分鐘)。

          為了避免每次等待,我們使用requests_cache方法,它使用本地sqlite數(shù)據(jù)庫來存儲(chǔ)最近請(qǐng)求的結(jié)果。對(duì)數(shù)據(jù)的請(qǐng)求使用一種漸進(jìn)的“搜索”方法:如果數(shù)據(jù)中存在缺口,則首先填充中間點(diǎn),并且它更傾向于首先加載最近的時(shí)間點(diǎn)。這意味著隨著時(shí)間的推移,整個(gè)情節(jié)的分辨率會(huì)逐漸提高,而不是只提高缺口之后的。

          轉(zhuǎn)換

          默認(rèn)情況下,應(yīng)用程序檢索的是歐元匯率,并顯示到該基礎(chǔ)貨幣的換算。如果您更改基礎(chǔ)貨幣,它將再次檢索該新貨幣的所有數(shù)據(jù)。這個(gè)行為稍微有點(diǎn)愚蠢,因?yàn)槿绻覀冇袑?duì)歐元的匯率,我們可以通過歐元計(jì)算任何其他貨幣->貨幣轉(zhuǎn)換(損失一點(diǎn)點(diǎn)準(zhǔn)確性)。

          15、單人紙牌

          Ronery-PyQt中的紙牌游戲

          經(jīng)典的紙牌游戲。游戲跟紙牌在其他方面是相同的,提供相同的選項(xiàng)。它由PyQt構(gòu)建,使用QGraphicsScene來處理游戲區(qū)域。

          Ronery1

          經(jīng)典紙牌獲勝屏幕也實(shí)現(xiàn)了,盡管由于播放畫布不是位圖,所以不會(huì)“填滿”。但仍然足夠令人滿意。

          Ronery2

          配置選項(xiàng)允許1次發(fā)1張或3張,允許3、5或無限輪。

          代碼注釋

          卡片處理

          這里使用的方法是將每個(gè)可以放置卡片的地方作為一個(gè)“堆棧”對(duì)象來處理它當(dāng)前持有的卡片。每個(gè)堆棧負(fù)責(zé)其堆棧上卡片的布局。

          堆棧還負(fù)責(zé)接受/拒絕嘗試在其上放置卡的行為。有些堆棧,如交易堆不接受任何降牌。其他的特殊堆有特定的規(guī)則。

          在大多數(shù)情況下,除了底部的“在玩”牌堆外,牌堆上的任何牌都沒有聯(lián)系。底部的卡片具有父子關(guān)系,允許一次拖動(dòng)多張卡片。

          結(jié)束動(dòng)畫

          最后的結(jié)束動(dòng)畫是獨(dú)立的,并且發(fā)生在比賽時(shí)間之外,所以第一個(gè)想法是有一個(gè)單獨(dú)的假事件循環(huán),使用QApplication.processEvents勾選。但那實(shí)現(xiàn)起來有點(diǎn)惡心。

          相反,動(dòng)畫是由QTimer處理的,QTimer通常在播放過程中處于空閑狀態(tài),一旦被觸發(fā)就會(huì)反復(fù)ping一個(gè)動(dòng)畫前進(jìn)投放。這會(huì)移動(dòng)卡片(假裝是“重力”,反彈)以及在它們離開游戲區(qū)域后重新堆疊它們。使用正常的堆疊代碼就可以實(shí)現(xiàn)重新堆疊,這樣它們就可以堆積起來。最后一個(gè)難題是阻止用戶的交互,否則卡片仍然可以被抓取和丟棄。實(shí)現(xiàn)這一點(diǎn)的最簡單方法是在整個(gè)窗口上放置一個(gè)對(duì)象,該對(duì)象被設(shè)置為捕獲(并放棄)所有鼠標(biāo)單擊。

          最后,想創(chuàng)建自己的應(yīng)用程序嗎?

          如果你覺得這些 app 有些太過簡潔,希望了解更多關(guān)于 PyQt 的信息,請(qǐng)參閱PyQt5 教程[19],它涵蓋了使用PyQt構(gòu)建app從前到后所需的所有知識(shí)。

          你也可以在這個(gè)網(wǎng)站上找到關(guān)于這些“小型app”的評(píng)論。

          擴(kuò)展

          如果你想了解更多,可以移步這里觀看更多的官方示例:https://diagrams.mingrammer.com/docs/getting-started/examples

          參考資料

          [1]

          這個(gè)網(wǎng)站: https://www.learnpyqt.com/apps/

          [2]

          pyqt5入門教程: https://www.learnpyqt.com/courses/start/

          [3]

          網(wǎng)絡(luò)瀏覽器: https://github.com/learnpyqt/15-minute-apps/tree/master/browser

          [4]

          網(wǎng)絡(luò)瀏覽器(選項(xiàng)卡): https://github.com/learnpyqt/15-minute-apps/tree/master/browser_tabbed

          [5]

          掃雷: https://github.com/learnpyqt/15-minute-apps/tree/master/minesweeper

          [6]

          No2Pads: https://github.com/learnpyqt/15-minute-apps/tree/master/notepad

          [7]

          計(jì)算器: https://github.com/learnpyqt/15-minute-apps/tree/master/calculator

          [8]

          文字處理器: https://github.com/learnpyqt/15-minute-apps/tree/master/wordprocessor

          [9]

          攝像頭/快照: https://github.com/learnpyqt/15-minute-apps/tree/master/camera

          [10]

          播放器: https://github.com/learnpyqt/15-minute-apps/tree/master/mediaplayer

          [11]

          便箋: https://github.com/learnpyqt/15-minute-apps/tree/master/notes

          [12]

          畫圖: https://github.com/learnpyqt/15-minute-apps/tree/master/paint

          [13]

          解壓縮: https://github.com/learnpyqt/15-minute-apps/tree/master/unzip

          [14]

          翻譯: https://github.com/learnpyqt/15-minute-apps/tree/master/translate

          [15]

          天氣: https://github.com/learnpyqt/15-minute-apps/tree/master/weather

          [16]

          貨幣轉(zhuǎn)換器: https://github.com/learnpyqt/15-minute-apps/tree/master/currency

          [17]

          單人紙牌: https://github.com/learnpyqt/15-minute-apps/tree/master/solitaire

          [18]

          fixer.io: https://fixer.io/

          [19]

          PyQt5教程: https://www.learnpyqt.com/

          近兩年里,我原創(chuàng)和翻譯了130+技術(shù)文章,主要關(guān)注Python進(jìn)階、小技巧、編程設(shè)計(jì)、PEP翻譯、Python哲學(xué)等話題。現(xiàn)已集結(jié)出了一本電子書《優(yōu)雅的Python》,請(qǐng)回復(fù)數(shù)字『1』,獲取下載地址。

          近期熱門文章推薦:

          開源框架 Zappa:上線 Python 應(yīng)用僅需一條命令!
          記一次列表預(yù)分配空間的鍋
          Python 內(nèi)存分配時(shí)的小秘密
          Android 手機(jī)如何改造成 Linux 服務(wù)器?
          Python 為什么不支持 i++ 自增語法,不提供 ++ 操作符?

          分享在看是對(duì)我最大的支持!

          瀏覽 86
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色欧美网站 | 欧洲精品久久久久 | 黄片免费高清 | 国庄三级HD中文久久精品 | 一区=区免费视频 |