pygame庫pgu使用示例代碼
前言
現在用pygame制作小遊戲的人越來越多,但是pygame它是沒有彈窗機制的
一般解決這個問題我們會使用tkinter庫或者pgu庫兩種方式
其中pgu庫還沒有很適合新手的一個手冊介紹,隻有下載文件中的一些函數的例子與說明,因此本文主要介紹pgu由按鈕與設定事件觸發的兩種方式
此外還解決瞭在pygame的窗口下彈窗的問題
一、pgu是什麼?
pgu全稱是Phil’s pyGame Utilities,是pygame的一組模塊與腳本,其中還有gui集成瞭一些小模塊
下載地址
下載地址
pgu主頁
二、使用步驟
1.安裝庫
window10下打開cmd輸入pip install pygame-pgu即可
也可以用上面的地址直接下載包
2.制作按鈕彈窗
代碼如下(示例):
引入庫
import pygame import random import pgu from pgu import gui,timer
先用pygame生成一個500*500的窗口,pgu的例子裡有許多彈窗,但是在pygame生成的窗口上彈窗的比較少
pygame.init() screencaption = pygame.display.set_caption('chess') screen = pygame.display.set_mode((500, 500))
構造一個自定義的彈窗(dialog)類
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)
初始化,pgu最好生成一個容器來存放需要放的按鈕等,最後記得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生成一個500*500的窗口,再用導入pgu的彈窗元素
pygame.init() screencaption = pygame.display.set_caption('chess') screen = pygame.display.set_mode((500, 500))
主函數就是pygame的事件循環獲取機制,但是需要註意的是用app.event函數將pygame的事件傳達到pgu中,否則無法執行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)) #生成一個屏幕 app.paint() #將pgu容器的內容畫出來 pygame.display.update()
3.制作事件觸發彈窗
除瞭通過界面上的按鈕觸發事件,我們常常也需要采用發生瞭某個事件觸發彈窗,這裡設置瞭變量a,每按動一次按鈕a增加1,直到a大於5時觸發彈窗彈出事件
引入庫
a = 0
將a的自增函數綁定到按鈕上
def add(self): global a a = a + 1 btn.connect(gui.CLICK, add, None)#將按鈕與彈窗的彈出綁定
加入判斷狀態函數,判斷為True時彈出彈窗即可
if a > 5: abc.open() a = 0
4.兩種模式完整代碼
按鈕觸發彈窗
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)) #生成一個屏幕 app.paint() #將pgu容器的內容畫出 pygame.display.update()
事件觸發彈窗代碼
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)) #生成一個屏幕 app.paint() #將pgu容器的內容畫出 if a > 5: abc.open() a = 0 pygame.display.update()
本人在嘗試時發現:
1、如果沒有screen.fill的函數彈出的窗口會無法關閉
2、如果沒有app.event則pgu事件無法執行
總結
pgu的庫網上內容較少,且較之tkinter運用在pygame上會更加穩定,但是pgu的硬傷是無法顯示中文的界面,因此有這方面的需求最好還是使用tkinter
到此這篇關於pygame庫pgu使用介紹的文章就介紹到這瞭,更多相關pygame庫pgu使用內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Pygame遊戲開發之太空射擊實戰入門篇
- Pygame Surface創建圖像的實現
- 教你如何在Pygame 中移動你的遊戲角色
- Python趣味挑戰之教你用pygame畫進度條
- 手把手教你利用Python創建一個遊戲窗口