0
1

More than 1 year has passed since last update.

pygameでテキストボックスから数値を入力する

Last updated at Posted at 2023-01-06

日付:2023/01/06
分類:python pygame

pygameでinput文みたいなものがあればいいのですが、ないので作ってみました
作っているうちにinput文というよりテキストボックス的なものになってしまいました;;;

4桁の数値を入力しているところ

repl.itで試せます

使い方

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()

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1