pygame仿office的頁面切換功能(完整代碼)
一、最簡單的切換功能
(一)源碼
import sys, pygame import os import random pygame.init() # 初始化pygame類 screen = pygame.display.set_mode((600, 600)) # 設(shè)置窗口大小 pygame.display.set_caption('美麗的屏保') # 設(shè)置窗口標(biāo)題 tick = pygame.time.Clock() fps = 10 # 設(shè)置刷新率,數(shù)字越大刷新率越高 fcclock = pygame.time.Clock() bglist = [] flag = 0 runimage = None nextimage = None def init_image(): path = './image/' files = [] dirs = os.listdir(path) for diretion in dirs: files.append(path + diretion) for file in files: picture = pygame.transform.scale(pygame.image.load(file), (600, 600)) dSurface = picture # dSurface = pygame.image.load(file).convert() bglist.append(dSurface) def reset(): global flag,runimage,nextimage flag = 0 if nextimage is None: nextimage = random.choice(bglist) if runimage is None: runimage = random.choice(bglist) else: runimage = nextimage nextimage = random.choice(bglist) def run(): global flag,runimage reset() while True: for event in pygame.event.get(): if event.type == pygame.QUIT or event.type == pygame.K_F1: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit() if event.key == pygame.K_SPACE: reset() if event.type == pygame.MOUSEBUTTONDOWN: reset() screen.fill((255, 255, 255)) # 設(shè)置背景為白色 screen.blit(nextimage, (0, 0)) screen.blit(runimage, (0, 0)) fcclock.tick(fps) pygame.display.flip() # 刷新窗口 # time.sleep(10) if __name__ == '__main__': init_image() run()
(二)效果
(三)解析
實(shí)際就是使用了runimage和nextimage保存兩個(gè)圖片,然后先黏貼nextimage,再黏貼runimage,讓runimage顯示在最前端。
并通過監(jiān)聽鼠標(biāo)和鍵盤操作,每點(diǎn)擊一次,切換一次頁面。
并調(diào)用reset函數(shù)
def reset(): global flag,runimage,nextimage flag = 0 if nextimage is None: nextimage = random.choice(bglist) if runimage is None: runimage = random.choice(bglist) else: runimage = nextimage nextimage = random.choice(bglist)
二、實(shí)現(xiàn)動(dòng)態(tài)切屏功能
(一)向左切換
import sys, pygame import os import random pygame.init() # 初始化pygame類 WIDTH = 600 HEIGHT = 600 screen = pygame.display.set_mode((WIDTH, HEIGHT)) # 設(shè)置窗口大小 pygame.display.set_caption('美麗的屏保') # 設(shè)置窗口標(biāo)題 tick = pygame.time.Clock() fps = 60 # 設(shè)置刷新率,數(shù)字越大刷新率越高 fcclock = pygame.time.Clock() bglist = [] flag = 0 runimage = None nextimage = None flag = False # FALSE沒有切屏 TRUE 切屏 flag2 = False i = 0 j = 0 step = 10 def init_image(): path = './image/' files = [] dirs = os.listdir(path) for diretion in dirs: files.append(path + diretion) for file in files: picture = pygame.transform.scale(pygame.image.load(file), (WIDTH, HEIGHT)) dSurface = picture # dSurface = pygame.image.load(file).convert() bglist.append(dSurface) def reset(): global flag,runimage,nextimage,flag2,i,j flag = False # FALSE沒有切屏 TRUE 切屏 flag2 = False i = 0 j = 0 if nextimage is None: nextimage = random.choice(bglist) if runimage is None: runimage = random.choice(bglist) else: runimage = nextimage nextimage = random.choice(bglist) def run(): global flag,runimage,flag2,nextimage,i,j reset() while True: for event in pygame.event.get(): if event.type == pygame.QUIT or event.type == pygame.K_F1: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit() if event.key == pygame.K_SPACE: if flag is False:# FALSE沒有切屏 TRUE 切屏 flag = True flag2 = False # if event.type == pygame.MOUSEBUTTONDOWN: # reset() screen.fill((255, 255, 255)) # 設(shè)置背景為白色 if flag: screen.blit(nextimage, (0, 0)) screen.blit(runimage, (i, j)) i -= step if i <= -WIDTH: flag2 = True else: screen.blit(nextimage, (0, 0)) screen.blit(runimage, (0, 0)) if flag2: reset() fcclock.tick(fps) pygame.display.flip() # 刷新窗口 # time.sleep(10) if __name__ == '__main__': init_image() run()
(二)向左切換效果
三、隨機(jī)效果實(shí)現(xiàn)
實(shí)現(xiàn)上下左右效果
import sys, pygame import os import random pygame.init() # 初始化pygame類 WIDTH = 600 HEIGHT = 600 screen = pygame.display.set_mode((WIDTH, HEIGHT)) # 設(shè)置窗口大小 pygame.display.set_caption('美麗的屏保') # 設(shè)置窗口標(biāo)題 tick = pygame.time.Clock() fps = 60 # 設(shè)置刷新率,數(shù)字越大刷新率越高 fcclock = pygame.time.Clock() bglist = [] flag = 0 runimage = None nextimage = None flag = False # FALSE沒有切屏 TRUE 切屏 flag2 = False i = 0 j = 0 step = 10 choose = 0 def init_image(): path = './image/' files = [] dirs = os.listdir(path) for diretion in dirs: files.append(path + diretion) for file in files: picture = pygame.transform.scale(pygame.image.load(file), (WIDTH, HEIGHT)) dSurface = picture # dSurface = pygame.image.load(file).convert() bglist.append(dSurface) def reset(): global flag,runimage,nextimage,flag2,i,j,choose flag = False # FALSE沒有切屏 TRUE 切屏 flag2 = False i = 0 j = 0 choose = random.randint(0,3) if nextimage is None: nextimage = random.choice(bglist) if runimage is None: runimage = random.choice(bglist) else: runimage = nextimage nextimage = random.choice(bglist) def run(): global flag,runimage,flag2,nextimage,i,j,choose reset() while True: for event in pygame.event.get(): if event.type == pygame.QUIT or event.type == pygame.K_F1: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit() if event.key == pygame.K_SPACE: if flag is False:# FALSE沒有切屏 TRUE 切屏 flag = True flag2 = False screen.fill((255, 255, 255)) # 設(shè)置背景為白色 if flag: screen.blit(nextimage, (0,0)) print(i+WIDTH,j+HEIGHT) screen.blit(runimage, (i, j)) if choose==0: i -= step if i <= -WIDTH: flag2 = True elif choose==1: i += step if i >= WIDTH: flag2 = True elif choose==2: j -= step if j <= -HEIGHT: flag2 = True elif choose==3: j += step if j >= HEIGHT: flag2 = True else: screen.blit(nextimage, (0, 0)) screen.blit(runimage, (0, 0)) if flag2: reset() # print(choose) fcclock.tick(fps) pygame.display.flip() # 刷新窗口 # time.sleep(10) if __name__ == '__main__': init_image() run()
四、效果展現(xiàn)
五、第二個(gè)版本
(一)修改了核心代碼
if flag: if choose==0: i -= step screen.blit(nextimage, (i+WIDTH, 0)) if i <= -WIDTH: flag2 = True elif choose==1: screen.blit(nextimage, (i-WIDTH, 0)) i += step if i >= WIDTH: flag2 = True elif choose==2: screen.blit(nextimage, (0, j+HEIGHT)) j -= step if j <= -HEIGHT: flag2 = True elif choose==3: screen.blit(nextimage, (0, j-HEIGHT)) j += step if j >= HEIGHT: flag2 = True screen.blit(runimage, (i, j)) else: screen.blit(nextimage, (0, 0)) screen.blit(runimage, (0, 0))
(二)完整代碼
import sys, pygame import os import random pygame.init() # 初始化pygame類 WIDTH = 600 HEIGHT = 600 screen = pygame.display.set_mode((WIDTH, HEIGHT)) # 設(shè)置窗口大小 pygame.display.set_caption('美麗的屏保') # 設(shè)置窗口標(biāo)題 tick = pygame.time.Clock() fps = 60 # 設(shè)置刷新率,數(shù)字越大刷新率越高 fcclock = pygame.time.Clock() bglist = [] flag = 0 runimage = None nextimage = None flag = False # FALSE沒有切屏 TRUE 切屏 flag2 = False i = 0 j = 0 step = 10 choose = 0 def init_image(): path = './image/' files = [] dirs = os.listdir(path) for diretion in dirs: files.append(path + diretion) for file in files: picture = pygame.transform.scale(pygame.image.load(file), (WIDTH, HEIGHT)) dSurface = picture # dSurface = pygame.image.load(file).convert() bglist.append(dSurface) def reset(): global flag,runimage,nextimage,flag2,i,j,choose flag = False # FALSE沒有切屏 TRUE 切屏 flag2 = False i = 0 j = 0 choose = random.randint(0,3) if nextimage is None: nextimage = random.choice(bglist) if runimage is None: runimage = random.choice(bglist) else: runimage = nextimage nextimage = random.choice(bglist) def run(): global flag,runimage,flag2,nextimage,i,j,choose reset() while True: for event in pygame.event.get(): if event.type == pygame.QUIT or event.type == pygame.K_F1: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit() if event.key == pygame.K_SPACE: if flag is False:# FALSE沒有切屏 TRUE 切屏 flag = True flag2 = False screen.fill((255, 255, 255)) # 設(shè)置背景為白色 if flag: if choose==0: i -= step screen.blit(nextimage, (i+WIDTH, 0)) if i <= -WIDTH: flag2 = True elif choose==1: screen.blit(nextimage, (i-WIDTH, 0)) i += step if i >= WIDTH: flag2 = True elif choose==2: screen.blit(nextimage, (0, j+HEIGHT)) j -= step if j <= -HEIGHT: flag2 = True elif choose==3: screen.blit(nextimage, (0, j-HEIGHT)) j += step if j >= HEIGHT: flag2 = True screen.blit(runimage, (i, j)) else: screen.blit(nextimage, (0, 0)) screen.blit(runimage, (0, 0)) if flag2: reset() # print(choose) fcclock.tick(fps) pygame.display.flip() # 刷新窗口 # time.sleep(10) if __name__ == '__main__': init_image() run()
(三)另一種效果
六、小結(jié)
Ok,V1和V2版本,兩個(gè)版本,任君選擇,比較簡單,大家將就著看看啊。后面會(huì)有修訂和更多有趣的案例,歡迎關(guān)注,感謝支持!
以上就是pygame實(shí)現(xiàn)類似office的頁面切換功能的詳細(xì)內(nèi)容,更多關(guān)于pygame頁面切換的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Matplotlib中%matplotlib inline如何使用
這篇文章主要介紹了Matplotlib中%matplotlib inline如何使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Python實(shí)現(xiàn)視頻轉(zhuǎn)換為字符畫詳解
這篇文章主要介紹了如何通過Python實(shí)現(xiàn)讀取視頻并將其轉(zhuǎn)換為字符畫的示例代碼,文中講解詳細(xì),對(duì)我們的學(xué)習(xí)和工作有一點(diǎn)的價(jià)值,感興趣的小伙伴可以了解一下2021-12-12Python使用QQ郵箱發(fā)送郵件報(bào)錯(cuò)smtplib.SMTPAuthenticationError
這篇文章主要介紹了Python使用QQ郵箱發(fā)送郵件報(bào)錯(cuò)smtplib.SMTPAuthenticationError,簡單介紹了python 發(fā)送郵件的步驟,需要的朋友可以參考下2019-12-12Pandas時(shí)間序列:時(shí)期(period)及其算術(shù)運(yùn)算詳解
今天小編就為大家分享一篇Pandas時(shí)間序列:時(shí)期(period)及其算術(shù)運(yùn)算詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02Python簡單實(shí)現(xiàn)socket信息發(fā)送與監(jiān)聽功能示例
這篇文章主要介紹了Python簡單實(shí)現(xiàn)socket信息發(fā)送與監(jiān)聽功能,結(jié)合實(shí)例形式分析了Python基于socket構(gòu)建客戶端與服務(wù)器端通信相關(guān)操作技巧,需要的朋友可以參考下2018-01-01如何通過雪花算法用Python實(shí)現(xiàn)一個(gè)簡單的發(fā)號(hào)器
這篇文章主要介紹了如何通過雪花算法用Python實(shí)現(xiàn)一個(gè)簡單的發(fā)號(hào)器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Vision?Transformer圖像分類模型導(dǎo)論
這篇文章主要為大家介紹了Vision?Transformer圖像分類模型導(dǎo)論,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Python3實(shí)現(xiàn)漢語轉(zhuǎn)換為漢語拼音
這篇文章主要為大家詳細(xì)介紹了Python3實(shí)現(xiàn)漢語轉(zhuǎn)換為漢語拼音,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07