摘要:結(jié)果在安裝完之后,安裝也要安裝之后,運(yùn)行常規(guī)的測試函數(shù)返回的數(shù)字是,排除問題的方法就是把已知可以的子模塊都先運(yùn)行掉。說了這么多,它到底了哪些子模塊我把官網(wǎng)上面的里介紹的所有帶有的子模塊都運(yùn)行了一遍。
環(huán)境
Python3.6.8
pygame1.9.4
import pygame my_font = pygame.font.SysFont("arial", 16) my_font = pygame.font.Font("my_font.ttf", 16)報錯內(nèi)容:
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
不管先執(zhí)行哪一個字體語句都會報錯,
當(dāng)發(fā)生此錯誤時
這時我們該檢查
程序開始部分是否缺少pygame的初始化語句pygame.init()
而我們想問了, pygame.init()到底初始化個啥呀???
這個問題問得好!
init 這個單詞在我們用python進(jìn)行面向?qū)ο箝_發(fā)的時候是跑不了的。理解python的__init__()其實就是和這里的init()作用差不多。做的工作都是__初始化__.至于他在干什么,我的解釋是這樣的:
我們已經(jīng)知道python有一個特殊的“工具包(模塊)”叫pygame了。在我們要動手用它完成我們的想法之前,電腦這個強(qiáng)迫癥需要我們檢查一遍,這個工具包是否完整,能否正常給我們提供幫助。而這個檢查的動作,就是pygame.init()那么init()實際上檢查了哪些東西呢?
這個其實也不難實驗。直接在shell里面,我執(zhí)行了這個函數(shù):
>>> 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.
初始化所有導(dǎo)入的pygame模塊。如果模塊失敗,則不會引發(fā)異常,但如果成功且失敗的總數(shù)將作為元組返回。您可以隨時手動初始化單個模塊,但pygame.init()初始化所有導(dǎo)入的pygame模塊是一種方便的方法來啟動所有內(nèi)容。各個模塊的init()函數(shù)會在失敗時引發(fā)異常。關(guān)于init()的一個意外的實驗您可能希望多帶帶初始化不同的模塊以加速您的程序或不使用您的游戲沒有的東西。
不止一次調(diào)用此init()是安全的:重復(fù)調(diào)用將不起作用。即使你有pygame.quit()所有模塊也是如此。
我以前從來沒有深究過pygame.init()這個函數(shù)究竟init了哪些模塊,僅僅在實踐的過程中知道,音頻播放和創(chuàng)建文字字體的時候,如果沒有init就會報錯。
今天我在安裝我的新的電腦環(huán)境的時候,因為不知道電腦的型號,所以并沒有特意去搜索和安裝電腦對應(yīng)的驅(qū)動。結(jié)果在安裝完python之后,安裝pygame(wheel也要安裝)之后,運(yùn)行常規(guī)的測試函數(shù)pygame.init()返回的數(shù)字是(5,1)
排除問題的方法就是把已知可以init()的子模塊都先運(yùn)行掉。經(jīng)過排查,發(fā)現(xiàn)pygame無法調(diào)用聲卡驅(qū)動。剩下的事情就好辦很多了,重新安裝一下聲卡驅(qū)動,重啟之后就可以正常init了。
但是在這個過程中,我可以得出比以前更加接近實際的一個結(jié)論:
pygame.init()在做的,其實就是檢查,電腦上一些需要的硬件調(diào)用接口、基礎(chǔ)功能是否有問題。如果有,他會在程序運(yùn)行之前就反饋給你,方便你進(jìn)行排查和規(guī)避。
說了這么多,它到底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官網(wǎng)上面的doc里介紹的所有帶有init的子模塊都運(yùn)行了一遍。
其中midi和freetype這兩個模塊已經(jīng)沒有了(吐槽一下官方的文檔吧,都沒了還放著嘛)。
scrap初始化失敗是因為沒有窗口。這樣的話,其實已經(jīng)有5個模塊是被初始化了。但是scrap在沒有窗口的情況下會報錯,到底算不算一個init。還需要后面再仔細(xì)看看文檔和源碼吧。
That"s all!再次感謝這位大佬的分享!附上官方文檔
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/43216.html
摘要:接下來我們深入函數(shù),看看它干了什么。在我們寫的代碼里,我們會手動將元素掛載到樹上。到這里,我們已經(jīng)完成了元素掛載的全過程,接下來我們看一看更新的時候會發(fā)生什么。這部分應(yīng)該是負(fù)責(zé)的,我們要在組件的方法中調(diào)用。 etch簡介 首先我們有必要介紹一下etch。 etch是atom團(tuán)隊下的開源項目,是一套非常簡潔然而功能十分完善的virtualDOM機(jī)制。我在偶然的情況下接觸到了這個開源項...
摘要:重要的會在后面拎出來單獨(dú)詳解加鎖,防止在過程中,重啟或銷毀造成不必要的問題準(zhǔn)備此上下文以進(jìn)行刷新,設(shè)置其啟動日期和,活動標(biāo)志以及執(zhí)行屬性源的任何初始化,校驗配置文件。以后所有的相關(guān)的操作其實是委托給這個實例來處理的。 1、先上測試代碼 public static void main(String[] args){ //配置文件來啟動一個 ApplicationContext App...
摘要:之所以這里要添加這四行代碼,其實是為了當(dāng)你重新開始也就是第二次及以后點(diǎn)擊按鈕游戲時,計分板能正確顯示。當(dāng)?shù)谝贿\(yùn)行游戲時,沒有這四行也能正確顯示計分板。 《Python編程:從入門到實踐》筆記。本篇是Python小游戲《外星人入侵》的最后一篇。 1. 前言 本篇我們將結(jié)束Pygame小游戲《外星人入侵》的開發(fā)。在本篇中,我們將添加如下內(nèi)容: 添加一個Play按鈕,用于根據(jù)需要啟動游戲以...
摘要:于是我們繼續(xù)斷點(diǎn)往下走,發(fā)現(xiàn)對象里面只有一個類名路徑為。進(jìn)入看看,這個配置類有哪些重要的方法。。。分析一果不其然,方法被調(diào)用了,緊接著也進(jìn)入斷點(diǎn),然后在往下走,又進(jìn)入的方法中的回調(diào)處。 SpringCloud(第 050 篇)Netflix Eureka 源碼深入剖析(下) - 一、大致介紹 1、鑒于一些朋友的提問并提議講解下eureka的源碼分析,由此應(yīng)運(yùn)而產(chǎn)生的本章節(jié)的內(nèi)容; 2、...
閱讀 2899·2021-10-13 09:48
閱讀 3947·2021-10-13 09:39
閱讀 3687·2021-09-22 16:04
閱讀 1927·2021-09-03 10:48
閱讀 917·2021-08-03 14:04
閱讀 2419·2019-08-29 15:18
閱讀 3480·2019-08-26 12:19
閱讀 2937·2019-08-26 12:08