摘要:結果在安裝完之后,安裝也要安裝之后,運行常規的測試函數返回的數字是,排除問題的方法就是把已知可以的子模塊都先運行掉。說了這么多,它到底了哪些子模塊我把官網上面的里介紹的所有帶有的子模塊都運行了一遍。
環境
Python3.6.8
pygame1.9.4
import pygame my_font = pygame.font.SysFont("arial", 16) my_font = pygame.font.Font("my_font.ttf", 16)報錯內容:
Traceback (most recent call last): File "C:UsersHaoziHuangDesktoppygame44.py", line 6, inmy_font = pygame.font.SysFont("arial", 16) File "D: jyjPythonpython3.6.8libsite-packagespygamesysfont.py", line 320, in SysFont return constructor(fontname, size, set_bold, set_italic) File "D: jyjPythonpython3.6.8libsite-packagespygamesysfont.py", line 243, in font_constructor font = pygame.font.Font(fontpath, size) pygame.error: font not initialized
不管先執行哪一個字體語句都會報錯,
當發生此錯誤時
這時我們該檢查
程序開始部分是否缺少pygame的初始化語句pygame.init()
而我們想問了, pygame.init()到底初始化個啥呀???
這個問題問得好!
init 這個單詞在我們用python進行面向對象開發的時候是跑不了的。理解python的__init__()其實就是和這里的init()作用差不多。做的工作都是__初始化__.至于他在干什么,我的解釋是這樣的:
我們已經知道python有一個特殊的“工具包(模塊)”叫pygame了。在我們要動手用它完成我們的想法之前,電腦這個強迫癥需要我們檢查一遍,這個工具包是否完整,能否正常給我們提供幫助。而這個檢查的動作,就是pygame.init()那么init()實際上檢查了哪些東西呢?
這個其實也不難實驗。直接在shell里面,我執行了這個函數:
>>> import pygame >>> pygame.init() (6, 0)
不明所以的,他給了我一個元組(6,0),我也很不理解,這個6和0分別代表什么意思。所以查閱了pygame的官方文檔
initialize all imported pygame modulesinit() -> (numpass, numfail)
Initialize all imported pygame modules. No exceptions will be raised if a module fails, but the total number if successful and failed inits will be returned as a tuple. You can always initialize individual modules manually, but pygame.init() is a convenient way to get everything started. The init() functions for individual modules will raise exceptions when they fail.
You may want to initialize the different modules separately to speed up your program or to not use things your game does not.
It is safe to call this init() more than once: repeated calls will have no effect. This is true even if you have pygame.quit() all the modules.
初始化所有導入的pygame模塊。如果模塊失敗,則不會引發異常,但如果成功且失敗的總數將作為元組返回。您可以隨時手動初始化單個模塊,但pygame.init()初始化所有導入的pygame模塊是一種方便的方法來啟動所有內容。各個模塊的init()函數會在失敗時引發異常。關于init()的一個意外的實驗您可能希望多帶帶初始化不同的模塊以加速您的程序或不使用您的游戲沒有的東西。
不止一次調用此init()是安全的:重復調用將不起作用。即使你有pygame.quit()所有模塊也是如此。
我以前從來沒有深究過pygame.init()這個函數究竟init了哪些模塊,僅僅在實踐的過程中知道,音頻播放和創建文字字體的時候,如果沒有init就會報錯。
今天我在安裝我的新的電腦環境的時候,因為不知道電腦的型號,所以并沒有特意去搜索和安裝電腦對應的驅動。結果在安裝完python之后,安裝pygame(wheel也要安裝)之后,運行常規的測試函數pygame.init()返回的數字是(5,1)
排除問題的方法就是把已知可以init()的子模塊都先運行掉。經過排查,發現pygame無法調用聲卡驅動。剩下的事情就好辦很多了,重新安裝一下聲卡驅動,重啟之后就可以正常init了。
但是在這個過程中,我可以得出比以前更加接近實際的一個結論:
pygame.init()在做的,其實就是檢查,電腦上一些需要的硬件調用接口、基礎功能是否有問題。如果有,他會在程序運行之前就反饋給你,方便你進行排查和規避。
說了這么多,它到底init了哪些子模塊>>> import pygame >>> pygame.init() (6, 0) >>> pygame.display.init() >>> pygame.font.init() >>> pygame.joystick.init() >>> pygame.mixer.init() >>> pygame.scrap.init() Traceback (most recent call last): File "", line 1, in pygame.error: No display mode is set >>> pygame.freetype.init() Traceback (most recent call last): File " ", line 1, in AttributeError: module "pygame" has no attribute "freetype" >>> pygame.midi.init() Traceback (most recent call last): File " ", line 1, in AttributeError: module "pygame" has no attribute "midi" >>> pygame.cdrom.init()
我把pygame官網上面的doc里介紹的所有帶有init的子模塊都運行了一遍。
其中midi和freetype這兩個模塊已經沒有了(吐槽一下官方的文檔吧,都沒了還放著嘛)。
scrap初始化失敗是因為沒有窗口。這樣的話,其實已經有5個模塊是被初始化了。但是scrap在沒有窗口的情況下會報錯,到底算不算一個init。還需要后面再仔細看看文檔和源碼吧。
That"s all!再次感謝這位大佬的分享!附上官方文檔
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43216.html
摘要:接下來我們深入函數,看看它干了什么。在我們寫的代碼里,我們會手動將元素掛載到樹上。到這里,我們已經完成了元素掛載的全過程,接下來我們看一看更新的時候會發生什么。這部分應該是負責的,我們要在組件的方法中調用。 etch簡介 首先我們有必要介紹一下etch。 etch是atom團隊下的開源項目,是一套非常簡潔然而功能十分完善的virtualDOM機制。我在偶然的情況下接觸到了這個開源項...
摘要:重要的會在后面拎出來單獨詳解加鎖,防止在過程中,重啟或銷毀造成不必要的問題準備此上下文以進行刷新,設置其啟動日期和,活動標志以及執行屬性源的任何初始化,校驗配置文件。以后所有的相關的操作其實是委托給這個實例來處理的。 1、先上測試代碼 public static void main(String[] args){ //配置文件來啟動一個 ApplicationContext App...
摘要:之所以這里要添加這四行代碼,其實是為了當你重新開始也就是第二次及以后點擊按鈕游戲時,計分板能正確顯示。當第一運行游戲時,沒有這四行也能正確顯示計分板。 《Python編程:從入門到實踐》筆記。本篇是Python小游戲《外星人入侵》的最后一篇。 1. 前言 本篇我們將結束Pygame小游戲《外星人入侵》的開發。在本篇中,我們將添加如下內容: 添加一個Play按鈕,用于根據需要啟動游戲以...
摘要:于是我們繼續斷點往下走,發現對象里面只有一個類名路徑為。進入看看,這個配置類有哪些重要的方法。。。分析一果不其然,方法被調用了,緊接著也進入斷點,然后在往下走,又進入的方法中的回調處。 SpringCloud(第 050 篇)Netflix Eureka 源碼深入剖析(下) - 一、大致介紹 1、鑒于一些朋友的提問并提議講解下eureka的源碼分析,由此應運而產生的本章節的內容; 2、...
閱讀 2822·2021-10-13 09:48
閱讀 3785·2021-10-13 09:39
閱讀 3597·2021-09-22 16:04
閱讀 1828·2021-09-03 10:48
閱讀 843·2021-08-03 14:04
閱讀 2363·2019-08-29 15:18
閱讀 3406·2019-08-26 12:19
閱讀 2873·2019-08-26 12:08