pygame庫(kù)pgu使用示例代碼
前言
現(xiàn)在用pygame制作小游戲的人越來(lái)越多,但是pygame它是沒(méi)有彈窗機(jī)制的
一般解決這個(gè)問(wèn)題我們會(huì)使用tkinter庫(kù)或者pgu庫(kù)兩種方式
其中pgu庫(kù)還沒(méi)有很適合新手的一個(gè)手冊(cè)介紹,只有下載文件中的一些函數(shù)的例子與說(shuō)明,因此本文主要介紹pgu由按鈕與設(shè)定事件觸發(fā)的兩種方式
此外還解決了在pygame的窗口下彈窗的問(wèn)題
一、pgu是什么?
pgu全稱是Phil's pyGame Utilities,是pygame的一組模塊與腳本,其中還有g(shù)ui集成了一些小模塊
下載地址
二、使用步驟
1.安裝庫(kù)
window10下打開cmd輸入pip install pygame-pgu即可
也可以用上面的地址直接下載包
2.制作按鈕彈窗
代碼如下(示例):
引入庫(kù)
import pygame import random import pgu from pgu import gui,timer
先用pygame生成一個(gè)500*500的窗口,pgu的例子里有許多彈窗,但是在pygame生成的窗口上彈窗的比較少
pygame.init() screencaption = pygame.display.set_caption('chess') screen = pygame.display.set_mode((500, 500))
構(gòu)造一個(gè)自定義的彈窗(dialog)類
class TestDialog(gui.Dialog): def __init__(this): title = gui.Label("Some Dialog Box") #彈窗標(biāo)題 label = gui.Label("Close this window to resume.") #彈窗內(nèi)容 gui.Dialog.__init__(this, title, label)
初始化,pgu最好生成一個(gè)容器來(lái)存放需要放的按鈕等,最后記得init初始化
app = gui.App() #初始化gui c = gui.Container(align=-1,valign=-1) #生成gui的容器 abc = TestDialog() #生成彈窗abc btn = gui.Button("a") #生成文字為a的按鈕 btn.connect(gui.CLICK, abc.open, None)#將按鈕與彈窗的彈出綁定 c.add(btn,0,0) #將按鈕安放在容器(0,0)位置 app.init(c)
先用pygame生成一個(gè)500*500的窗口,再用導(dǎo)入pgu的彈窗元素
pygame.init() screencaption = pygame.display.set_caption('chess') screen = pygame.display.set_mode((500, 500))
主函數(shù)就是pygame的事件循環(huán)獲取機(jī)制,但是需要注意的是用app.event函數(shù)將pygame的事件傳達(dá)到pgu中,否則無(wú)法執(zhí)行pgu的命令
while True: for e in pygame.event.get(): if e.type is pygame.QUIT: pygame.quit() else: app.event(e) #將pygame的事件傳遞給pgu,很重要 screen.fill((0,0,0)) #生成一個(gè)屏幕 app.paint() #將pgu容器的內(nèi)容畫出來(lái) pygame.display.update()
3.制作事件觸發(fā)彈窗
除了通過(guò)界面上的按鈕觸發(fā)事件,我們常常也需要采用發(fā)生了某個(gè)事件觸發(fā)彈窗,這里設(shè)置了變量a,每按動(dòng)一次按鈕a增加1,直到a大于5時(shí)觸發(fā)彈窗彈出事件
引入庫(kù)
a = 0
將a的自增函數(shù)綁定到按鈕上
def add(self): global a a = a + 1 btn.connect(gui.CLICK, add, None)#將按鈕與彈窗的彈出綁定
加入判斷狀態(tài)函數(shù),判斷為True時(shí)彈出彈窗即可
if a > 5: abc.open() a = 0
4.兩種模式完整代碼
按鈕觸發(fā)彈窗
import pygame import random import pgu from pgu import gui,timer class TestDialog(gui.Dialog): def __init__(this): title = gui.Label("Some Dialog Box") label = gui.Label("Close this window to resume.") gui.Dialog.__init__(this, title, label) pygame.init() screencaption = pygame.display.set_caption('chess') screen = pygame.display.set_mode((500, 500)) app = gui.App() #初始化gui c = gui.Container(align=-1,valign=-1) #生成gui的容器 abc = TestDialog() #生成彈窗abc btn = gui.Button("a") #生成文字為a的按鈕 btn.connect(gui.CLICK, abc.open, None)#將按鈕與彈窗的彈出綁定 c.add(btn,0,0) #將按鈕安放在容器(0,0)位置 app.init(c) while True: for e in pygame.event.get(): if e.type is pygame.QUIT: pygame.quit() else: app.event(e) #將pygame的事件傳遞給pgu,很重要 screen.fill((0,0,0)) #生成一個(gè)屏幕 app.paint() #將pgu容器的內(nèi)容畫出 pygame.display.update()
事件觸發(fā)彈窗代碼
import pygame import random import pgu from pgu import gui,timer class TestDialog(gui.Dialog): def __init__(this): title = gui.Label("Some Dialog Box") label = gui.Label("Close this window to resume.") gui.Dialog.__init__(this, title, label) pygame.init() screencaption = pygame.display.set_caption('chess') screen = pygame.display.set_mode((500, 500)) global a a = 0 app = gui.App() #初始化gui c = gui.Container(align=-1,valign=-1) #生成gui的容器 abc = TestDialog() #生成彈窗abc btn = gui.Button("a") #生成文字為a的按鈕 def add(self): global a a = a + 1 btn.connect(gui.CLICK, add, None)#將按鈕與彈窗的彈出綁定 c.add(btn,0,0) #將按鈕安放在容器(0,0)位置 app.init(c) while True: for e in pygame.event.get(): if e.type is pygame.QUIT: pygame.quit() else: app.event(e) #將pygame的事件傳遞給pgu,很重要 screen.fill((0,0,0)) #生成一個(gè)屏幕 app.paint() #將pgu容器的內(nèi)容畫出 if a > 5: abc.open() a = 0 pygame.display.update()
本人在嘗試時(shí)發(fā)現(xiàn):
1、如果沒(méi)有screen.fill的函數(shù)彈出的窗口會(huì)無(wú)法關(guān)閉
2、如果沒(méi)有app.event則pgu事件無(wú)法執(zhí)行
總結(jié)
pgu的庫(kù)網(wǎng)上內(nèi)容較少,且較之tkinter運(yùn)用在pygame上會(huì)更加穩(wěn)定,但是pgu的硬傷是無(wú)法顯示中文的界面,因此有這方面的需求最好還是使用tkinter
到此這篇關(guān)于pygame庫(kù)pgu使用介紹的文章就介紹到這了,更多相關(guān)pygame庫(kù)pgu使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用python實(shí)現(xiàn)的線程池實(shí)例代碼
這篇文章主要介紹了用python實(shí)現(xiàn)的線程池實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01python用opencv批量截取圖像指定區(qū)域的方法
今天小編就為大家分享一篇python用opencv批量截取圖像指定區(qū)域的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01音頻處理 windows10下python三方庫(kù)librosa安裝教程
這篇文章主要介紹了音頻處理 windows10下python三方庫(kù)librosa安裝方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06在Python中,不用while和for循環(huán)遍歷列表的實(shí)例
今天小編就為大家分享一篇在Python中,不用while和for循環(huán)遍歷列表的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02python opencv實(shí)現(xiàn)運(yùn)動(dòng)檢測(cè)
這篇文章主要為大家詳細(xì)介紹了python opencv實(shí)現(xiàn)運(yùn)動(dòng)檢測(cè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Django-xadmin后臺(tái)導(dǎo)入json數(shù)據(jù)及后臺(tái)顯示信息圖標(biāo)和主題更改方式
這篇文章主要介紹了Django-xadmin后臺(tái)導(dǎo)入json數(shù)據(jù)及后臺(tái)顯示信息圖標(biāo)和主題更改方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03PyQT5 QTableView顯示綁定數(shù)據(jù)的實(shí)例詳解
今天小編就為大家分享一篇PyQT5 QTableView顯示綁定數(shù)據(jù)的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06python實(shí)現(xiàn)大學(xué)人員管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)大學(xué)人員管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10