国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【pygame】創(chuàng)建輸入框和按鈕

這篇具有很好參考價(jià)值的文章主要介紹了【pygame】創(chuàng)建輸入框和按鈕。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

pygame里面并沒有封裝好的按鈕和輸入框, 以下是我親測(cè)有效且非常易上手的代碼

  1. 生成輸入框
    創(chuàng)建draw.py文件如下
import pygame
import os

class InputBox:
    def __init__(self, rect: pygame.Rect = pygame.Rect(100, 100, 140, 32)) -> None:
        """
        rect,傳入矩形實(shí)體,傳達(dá)輸入框的位置和大小
        """
        self.boxBody: pygame.Rect = rect
        self.color_inactive = pygame.Color('lightskyblue3')  # 未被選中的顏色
        self.color_active = pygame.Color('dodgerblue2')  # 被選中的顏色
        self.color = self.color_inactive  # 當(dāng)前顏色,初始為未激活顏色
        self.active = False
        self.text = '' # 輸入的內(nèi)容
        self.done = False
        self.font = pygame.font.Font(None, 32)

    def dealEvent(self, event: pygame.event.Event):
        if(event.type == pygame.MOUSEBUTTONDOWN):
            if(self.boxBody.collidepoint(event.pos)):  # 若按下鼠標(biāo)且位置在文本框
                self.active = not self.active
            else:
                self.active = False
            self.color = self.color_active if(
                self.active) else self.color_inactive
        if(event.type == pygame.KEYDOWN):  # 鍵盤輸入響應(yīng)
            if(self.active):
                if(event.key == pygame.K_RETURN):
                '''在鍵盤輸入的同時(shí),self.text的值也在隨之改變,其實(shí)并不需要通過按回車來記錄值'''
                    print(self.text) 
                    # self.text=''
                elif(event.key == pygame.K_BACKSPACE):
                    self.text = self.text[:-1]
                else:
                    self.text += event.unicode

    def draw(self, screen: pygame.surface.Surface):
        txtSurface = self.font.render(
            self.text, True, self.color)  # 文字轉(zhuǎn)換為圖片
            '''注意,輸入框的寬度實(shí)際是由這里max函數(shù)里的第一個(gè)參數(shù)決定的,改這里才有用'''
        width = max(200, txtSurface.get_width()+10)  # 當(dāng)文字過長(zhǎng)時(shí),延長(zhǎng)文本框
        self.boxBody.w = width
        screen.blit(txtSurface, (self.boxBody.x+5, self.boxBody.y+5))
        pygame.draw.rect(screen, self.color, self.boxBody, 2)

為了測(cè)試以上代碼,創(chuàng)建main.py如下:

import pygame
from pygame import Surface
from pygame.constants import QUIT

from draw import InputBox

WIDTH = 600
HEIGHT = 500
FPS = 120

screen: Surface = None  # 窗口實(shí)例
clock = None  # 時(shí)鐘實(shí)例

textFont = None  # 字體


def pygameInit(title: str = "pygame"):
    """初始化 pygame"""
    pygame.init()
    pygame.mixer.init()  # 聲音初始化
    pygame.display.set_caption(title)
    global screen, clock, textFont  # 修改全局變量
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    clock = pygame.time.Clock()

if __name__ == "__main__":
    pygameInit("輸入框示例")
    inputbox = InputBox(pygame.Rect(100, 20, 140, 32))  # 輸入框
    running = True
    while running:
        clock.tick(FPS)  # 限制幀數(shù)
        screen.fill((255, 255, 255))  # 鋪底
        for event in pygame.event.get():
            if event.type == QUIT:
                running = False
            inputbox.dealEvent(event)  # 輸入框處理事件
        inputbox.draw(screen)  # 輸入框顯示
        pygame.display.flip()
    pygame.quit()

效果如下:
【pygame】創(chuàng)建輸入框和按鈕

  1. 生成按鈕
    創(chuàng)建Button.py
class Button:
    NORMAL=0
    MOVE=1
    DOWN=2
    def __init__(self,x,y,text,imgNormal,imgMove=None,imgDown=None,callBackFunc=None,font=None,rgb=(0,0,0)):
        """
        初始化按鈕的相關(guān)參數(shù)
        :param x: 按鈕在窗體上的x坐標(biāo)
        :param y: 按鈕在窗體上的y坐標(biāo)
        :param text: 按鈕顯示的文本
        :param imgNormal: surface類型,按鈕正常情況下顯示的圖片
        :param imgMove: surface類型,鼠標(biāo)移動(dòng)到按鈕上顯示的圖片
        :param imgDown: surface類型,鼠標(biāo)按下時(shí)顯示的圖片
        :param callBackFunc: 按鈕彈起時(shí)的回調(diào)函數(shù)
        :param font: pygame.font.Font類型,顯示的字體
        :param rgb: 元組類型,文字的顏色
        """
        #初始化按鈕相關(guān)屬性
        self.imgs=[]
        if not imgNormal:
            raise Exception("請(qǐng)?jiān)O(shè)置普通狀態(tài)的圖片")
        self.imgs.append(imgNormal)     #普通狀態(tài)顯示的圖片
        self.imgs.append(imgMove)       #被選中時(shí)顯示的圖片
        self.imgs.append(imgDown)       #被按下時(shí)的圖片
        for i in range(2,0,-1):
            if not self.imgs[i]:
                self.imgs[i]=self.imgs[i-1]
 
        self.callBackFunc=callBackFunc      #觸發(fā)事件
        self.status=Button.NORMAL       #按鈕當(dāng)前狀態(tài)
        self.x=x
        self.y=y
        self.w=imgNormal.get_width()
        self.h=imgNormal.get_height()
        self.text=text
        self.font=font
        #文字表面
        self.textSur=self.font.render(self.text,True,rgb)
 
    def draw(self,destSuf):
        dx=(self.w/2)-(self.textSur.get_width()/2)
        dy=(self.h/2)-(self.textSur.get_height()/2)
        #先畫按鈕背景
        if self.imgs[self.status]:
            destSuf.blit(self.imgs[self.status], [self.x, self.y])
        #再畫文字
        destSuf.blit(self.textSur,[self.x+dx,self.y+dy])
 
    def colli(self,x,y):
        #碰撞檢測(cè)
        if self.x<x<self.x+self.w and self.y<y<self.y+self.h:
            return True
        else:
            return False
 
    def getFocus(self,x,y):
        #按鈕獲得焦點(diǎn)時(shí)
        if self.status==Button.DOWN:
            return
        if self.colli(x,y):
            self.status=Button.MOVE
        else:
            self.status=Button.NORMAL
 
    def mouseDown(self,x,y):
    '''通過在這個(gè)函數(shù)里加入返回值,可以把這個(gè)函數(shù)當(dāng)做判斷鼠標(biāo)是否按下的函數(shù),而不僅僅是像這里只有改變按鈕形態(tài)的作用'''
        if self.colli(x,y):
            self.status = Button.DOWN
 
    def mouseUp(self):
        if self.status==Button.DOWN:    #如果按鈕的當(dāng)前狀態(tài)是按下狀態(tài),才繼續(xù)執(zhí)行下面的代碼
            self.status=Button.NORMAL   #按鈕彈起,所以還原成普通狀態(tài)
            if self.callBackFunc:       #調(diào)用回調(diào)函數(shù)
                return self.callBackFunc()

為了使用這個(gè)類,創(chuàng)建main.py如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-509182.html

import pygame
 
from Button import Button
 
# 初始化pygame
pygame.init()
winSur = pygame.display.set_mode([300, 300])
 
# 加載按鈕圖片
'''這里需要自己準(zhǔn)備三張按鈕的圖片,分別對(duì)應(yīng)正常形態(tài),鼠標(biāo)懸停形態(tài),鼠標(biāo)按下形態(tài),把圖片放在和此文件同一目錄下即可''''
surBtnNormal = pygame.image.load("./btn_normal.png").convert_alpha()
surBtnMove = pygame.image.load("./btn_move.png").convert_alpha()
surBtnDown = pygame.image.load("./btn_down.png").convert_alpha()
 
#按鈕使用的字體
btnFont = pygame.font.SysFont("lisu", 40)
 
# 按鈕的回調(diào)函數(shù)
def btnCallBack():
    print("我被按下了")
 
 
# 創(chuàng)建按鈕
btn1 = Button(30, 50, "按鈕測(cè)試", surBtnNormal, surBtnMove, surBtnDown, btnCallBack,btnFont,(255,0,0))
btn2 = Button(30, 150, "", surBtnNormal, surBtnMove, surBtnDown, btnCallBack,btnFont)
 
# 游戲主循環(huán)
while True:
    mx, my = pygame.mouse.get_pos()  # 獲得鼠標(biāo)坐標(biāo)
 
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
        elif event.type == pygame.MOUSEMOTION:  # 鼠標(biāo)移動(dòng)事件
            # 判斷鼠標(biāo)是否移動(dòng)到按鈕范圍內(nèi)
            btn1.getFocus(mx, my)
            btn2.getFocus(mx, my)
 
        elif event.type == pygame.MOUSEBUTTONDOWN:  # 鼠標(biāo)按下
            if pygame.mouse.get_pressed() == (1, 0, 0): #鼠標(biāo)左鍵按下
                btn1.mouseDown(mx,my)
                btn2.mouseDown(mx, my)
 
        elif event.type == pygame.MOUSEBUTTONUP:  # 鼠標(biāo)彈起
            btn1.mouseUp()
            btn2.mouseUp()
 
    pygame.time.delay(16)
    winSur.fill((0, 0, 0))
    #繪制按鈕
    btn1.draw(winSur)
    btn2.draw(winSur)
    #刷新界面
    pygame.display.flip()

到了這里,關(guān)于【pygame】創(chuàng)建輸入框和按鈕的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Selenium4+python被單獨(dú)定義<div>的動(dòng)態(tài)輸入框和二級(jí)下拉框要怎么定位?

    Selenium4+python被單獨(dú)定義<div>的動(dòng)態(tài)輸入框和二級(jí)下拉框要怎么定位?

    今天在做練習(xí)題的時(shí)候,發(fā)現(xiàn)幾個(gè)問題搗鼓了好久,寫下這篇來記錄 ? 對(duì)于這種擁有二級(jí)框的選項(xiàng)無法定位,也不是select屬性. 我們查看下HTML,發(fā)現(xiàn)它是被單獨(dú)封裝在body內(nèi)擁有動(dòng)態(tài)屬性的獨(dú)立div,當(dāng)窗口點(diǎn)擊的時(shí)候才會(huì)觸發(fā). ? ? 這個(gè)日歷和上一個(gè)問題一樣,也是被單獨(dú)封裝在最后的

    2024年02月05日
    瀏覽(28)
  • Android里面,button按鈕怎么設(shè)置圓角?

    在Android中,可以通過創(chuàng)建一個(gè)自定義的Drawable XML文件來實(shí)現(xiàn)給Button設(shè)置圓角的效果。以下是創(chuàng)建圓角按鈕的步驟: 在 res/drawable 文件夾下,創(chuàng)建一個(gè)新的XML文件,例如 rounded_button.xml 。 在 rounded_button.xml 文件中,添加以下代碼: 在這里,你可以自定義圓角的半徑、按鈕的顏色

    2024年02月08日
    瀏覽(24)
  • Pygame按鈕集成及界面切換的實(shí)現(xiàn)

    pygame是python輕量級(jí)的游戲框架,通常用于微型小游戲的創(chuàng)作或者游戲編程思想的教育。pygame的功能集成程度比較低,通常需要將功能代碼人工再次集成包裝(模塊化、類化)才能更好地減少代碼量,起到復(fù)用的效果。 下面展示一段按鈕集成的代碼。展示了純文本(Text), 圖片

    2024年02月11日
    瀏覽(17)
  • Pygame 基礎(chǔ)教程13: 使用 精靈(Sprite) 實(shí)現(xiàn) 按鈕、開關(guān)按鈕 和 復(fù)選框

    Pygame 基礎(chǔ)教程13: 使用 精靈(Sprite) 實(shí)現(xiàn) 按鈕、開關(guān)按鈕 和 復(fù)選框

    原文鏈接:https://xiets.blog.csdn.net/article/details/131395471 版權(quán)聲明:原創(chuàng)文章禁止轉(zhuǎn)載 專欄目錄:Pygame 專欄(總目錄) Pygame 中并沒有按鈕、開關(guān)按鈕、復(fù)選框 等基礎(chǔ)交互組件,但實(shí)際游戲開發(fā)中又經(jīng)常用到。例如用于點(diǎn)擊按鈕開始游戲的「開始按鈕」,用于開啟/關(guān)閉背景音樂

    2024年02月04日
    瀏覽(28)
  • Element ui 里面 Table 通過點(diǎn)擊操作按鈕實(shí)現(xiàn)展開行功能

    Element ui 里面 Table 通過點(diǎn)擊操作按鈕實(shí)現(xiàn)展開行功能

    1.直接上代碼,個(gè)人隨記 ? 2.script 里的內(nèi)容 3.實(shí)現(xiàn)效果 ?

    2024年02月10日
    瀏覽(30)
  • 已安裝Pygame卻顯示“沒有名稱為 ‘pygame‘ 的模塊”

    已安裝Pygame卻顯示“沒有名稱為 ‘pygame‘ 的模塊”

    本來用pip已經(jīng)成功安裝Pygame到游戲程序所在文件夾,卻無法導(dǎo)入該模塊,如下: 打開設(shè)置 選擇“項(xiàng)目” 選”“Python解釋器” 如圖選擇python.exe,然后確定 發(fā)現(xiàn)可以導(dǎo)入Pygame模塊了,運(yùn)行就可以看到一個(gè)Pygame窗口 ????????? ????????另外,因?yàn)镻ygame版本必須和Python版本

    2024年02月11日
    瀏覽(32)
  • C 語(yǔ)言里面的 extern “C“ ,并沒有那么簡(jiǎn)單!

    C 語(yǔ)言里面的 extern “C“ ,并沒有那么簡(jiǎn)單!

    ? 本文詳細(xì)解析 extern \\\"C\\\" 的底層原理與實(shí)際應(yīng)用。 在你工作過的系統(tǒng)里,不知能否看到類似下面的代碼。 ? 這好像沒有什么問題,你應(yīng)該還會(huì)想: “ 嗯 ? 是啊,我們的代碼都是這樣寫的,從來沒有因此碰到過什么麻煩啊~ ” 。 你說的沒錯(cuò),如果你的頭文件從來沒有被任

    2024年02月07日
    瀏覽(19)
  • 國(guó)密算法(SM3)在C#里面的簡(jiǎn)單封裝

    接上一篇SM2,現(xiàn)奉上SM3的簡(jiǎn)單封裝 SM3是一款國(guó)產(chǎn)哈希算法,中華人民共和國(guó)政府采用的一種密碼散列函數(shù)標(biāo)準(zhǔn),由國(guó)家密碼管理局于2010年12月17日發(fā)布。相關(guān)標(biāo)準(zhǔn)為“GM/T 0004-2012 《SM3密碼雜湊算法》”。在商用密碼體系中,SM3主要用于數(shù)字簽名及驗(yàn)證、消息認(rèn)證碼生成及驗(yàn)證

    2024年02月12日
    瀏覽(26)
  • idea導(dǎo)入SpringBoot項(xiàng)目,沒有啟動(dòng)按鈕,沒有maven

    idea導(dǎo)入SpringBoot項(xiàng)目,沒有啟動(dòng)按鈕,沒有maven

    解決辦法:(快捷鍵雙擊Shift,在搜索框中搜索maven,點(diǎn)擊Add Maven Project,就 行了) 如果在idea出現(xiàn)下圖這種,說明成功了

    2024年02月11日
    瀏覽(88)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包