質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2649閲覧

pygameでタイムモジュールを使いたい

asasika

総合スコア7

Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/08/30 04:39

前提・実現したいこと

pythonのpygameを使って文字を一定時間で入れ替わるように表示させたいです。
しかし、pythonのタイムモジュールを使おうとしたのですが、timeがpygame.timeと認識されてしまいます。
なにか良い対応策を探しています。また、なぜpygame.timeと書いていないのにpygame.timeと読み込まれてしまうのでしょうか。
以上2点解答できる方がいらっしゃいましたら解答お願い致します。

発生している問題・エラーメッセージ

AttributeError: module 'pygame.time' has no attribute 'sleep

該当のソースコード

python3

1import time 2import pygame 3from pygame import * 4import sys 5 6def main(): 7 pygame.init() 8 screen=pygame.display.set_mode((400,300)) 9 font=pygame.font.Font(None,30) 10 a='first' 11 b='second' 12 sentense=a 13 text=font.render(sentense,True,(200,200,200)) 14 screen.blit(text,[100,100]) 15 time.sleep(2) 16 sentense=b 17 while(True): 18 pygame.display.update() 19 for event in pygame.event.get(): 20 if event.type==KEYDOWN: 21 if event.key==K_SPACE: 22 pygame.quit() 23 sys.exit() 24 25 26main()

補足情報(FW/ツールのバージョンなど)

python=3.5.5、vscodeを使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

>>> import time >>> time <module 'time' (build-in)> >>> from pygame import * >>> time <module 'pygame.time' from '...'>

原因: ここで先にimportされた time を上書きしてます
import time を後ろに持ってくる事でも解消できますが、
from pygame import * と共に推奨されない方法なので、
ワイルドカードは使わず、必要なモジュールを明示的に import しましょう。

pythonのpygameを使って文字を一定時間で入れ替わるように表示させたいです。

しかし、pythonのタイムモジュールを使おうとしたのですが、

この解決策として Python の time モジュールを使うのは、幾つか問題があります。

「文字を一定時間で入れ替わる」自体は実現可能ですが、
time.sleep では、コードの実行がそこで止るので、応答なしになり
その間の他のGUI操作を受け付けなくなってしまいます。

解決策:

  • pygame のtimer イベントを使う (pygame.time.set_timer)
  • time.sleep を使う場合、そのコードは別スレッドにする。

 但し、UI の更新はイベントループと同じスレッドで行う必要がある為、
スレッド間通信・排他制御等~が必要になります。(queue 等を使います)

他の問題点:
変数 sentence の値を変更するだけでは描画された文字は変更されません。
前の文字を取り消し、新たな文字を描画する必要があります

投稿2020/08/30 05:16

teamikl

総合スコア8760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asasika

2020/08/31 11:57

とてもご丁寧な解答ありがとうございます。考え方から違ってましたね汗。また、具体的な解決方法まで記載していただきとても助かります。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問