日付:2023/01/06
分類:python pygame
pygameでinput文みたいなものがあればいいのですが、ないので作ってみました
作っているうちにinput文というよりテキストボックス的なものになってしまいました;;;
4桁の数値を入力しているところ
使い方
import g_input
tbox(screen,font,x,y,w,h,n)
引数:
screen:サーフェス
font:フォント
x,y:テキストボックスの左上の座標
w,h:テキストボックスの幅と高さ
n:文字数
戻値:入力された数字のテキスト
コード 呼ばれる側
g_input.py
import pygame
from pygame.locals import *
import sys
def tbox(screen,font,x,y,w,h,n):
txt=""
isEnd=False#終了フラグ
while True:
pygame.draw.rect(screen, (255,255,0), Rect(x,y,w,h)) #ボックス内を塗潰す
txtg = font.render(txt, True, (55,55,55)) # 描画する文字列を画像にする
screen.blit(txtg, [x+5, y+5]) # 画像を表示
pygame.display.update() # 画面更新
# イベント処理
for event in pygame.event.get(): # イベントを取得
if event.type == QUIT: # 閉じるボタンが押されたら
pygame.quit()
sys.exit() # 終了
elif event.type == KEYDOWN:
if event.key==K_LEFT or event.key==K_BACKSPACE:#修正で戻る
if len(txt)>=1:
txt = txt[:-1]
elif event.key==K_RETURN:#エンターキー
isEnd=True
break
if len(txt)<n:
if event.key==K_PERIOD:#ピリオドが入力された
#print(".",end="")
txt+="."
else:
for i in range(10):#0-9キーが入力された
if event.key==48+i:
#print(i,end="")
txt+=str(i)
break
if isEnd==True:
break
#print()
return txt
if __name__ == "__main__":
pygame.init() # Pygameの初期化
screen = pygame.display.set_mode((800, 600)) # 800*600の画面
font = pygame.font.Font(None, 55) # 準備 フォントの設定(既定フォント,55px)
txt=tbox(screen,font,300,300,200,50,7)
print("the txt=",txt)
呼ぶ側のサンプル
all.py
import pygame
from pygame.locals import *
import sys
import g_input
def main():
pygame.init() # Pygameの初期化
screen = pygame.display.set_mode((800, 600)) # 800*600の画面
atxt=""
font = pygame.font.Font(None, 55) # 準備 フォントの設定(既定フォント,55px)
while True:
screen.fill((255,255,255))
#なにか図形を描画
pygame.draw.circle(screen,(10,10,10),(300,300),50)
pygame.draw.rect(screen, (255,0,0), Rect(410,100,50,50), 1)
#入力された文字を描画
txtg = font.render(atxt, True, (55,55,55)) # 描画する文字列を画像にする
screen.blit(txtg, [400, 400]) # 画像を表示
atxt=g_input.tbox(screen,font,400,200,150,50,4)# 文字を入力
pygame.display.update() # 画面更新
# イベント処理
for event in pygame.event.get(): # イベントを取得
if event.type == QUIT: # 閉じるボタンが押されたら
pygame.quit()
sys.exit() # 終了
if __name__ == "__main__":
main()