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

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

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

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

button

HTMLで用いる<button>タグです。

Python

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

Q&A

2回答

1250閲覧

ボタンを押したら数字が出てくるようにしたいです

m.bpouq

総合スコア0

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

button

HTMLで用いる<button>タグです。

Python

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

0グッド

0クリップ

投稿2021/11/16 11:26

import random
import tkinter as tk
import tkinter.ttk as ttk

ウィンドウの作成

root = tk.Tk()
root.title("ゲーム")
cv = tk.Canvas(root, width = 1000, height = 400)
cv.pack()

# 回答用のテキストボックス
entry = tk.Entry()
entry.configure(state='normal', width=20)
entry.pack()

#初期状態
def syoki():
global x
global label
x=random.randint(10000,100000)
label=tk.Label(master=root,text=x,font=("メイリオ",50,"normal"))

画面を描画する関数

def draw_objects():
cv.delete('all') # 既存の描画を破き

#数字を動かす関数
def move(i):
i+=2
label.place(x=i,y=150)
label.after(2,lambda: move(i))

#正解の表示する(OKを押した時)関数
def click1():
word = int(entry.get())
entry.delete(0, tk.END)
if(x==word):
m="正解"
else:
m="不正解"
global message
message = tk.Message(root, text=m,font=("",50))
message.pack()

#quitを押した時の関数
def click2():
quit()

#once againを押した時の関数
def click3():
message.pack_forget()
move(0)

#resetを押した時の関数
def click4():
message.pack_forget()
syoki()
move(0)

ゲームループの関数

def game_loop():
draw_objects()
root.after(1500, game_loop)

#ボタンの定義
button1 = tk.Button(root, text='OK', command=click1)
button1.place(x=600, y=405)
button2 = tk.Button(root, text='quit', command=click2)
button2.place(x=640, y=460)
button3 = tk.Button(root, text='once again', command=click3)
button3.place(x=300, y=460)
button4 = tk.Button(root, text='reset', command=click4)
button4.place(x=700, y=460)

#ゲームの開始
syoki();
move(0)
game_loop()

root.mainloop() # ゲームウィンドウを表示

#このプログラムの問題点
このプログラムは数字が左から流れてきて、それを当てるゲームを想定しています。うまくいっていない部分は、リセットボタンともう一度ボタンの動きがおかしいところです。最終的には、このボタンを押すと、新しい数字が出てくるか、もう一度同じ数字が出てくるようにしたいです。しかし、実際は数字が全く出てこず、止まってしまいます。このプログラムを手直ししてもらえると助かります。

大学の課題で作成中のプログラムになります。pythonは全くの初心者なので、プログラムの書き方がおかしい箇所もありますが、そのあたりは大目に見てもらえるとありがたいです。

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

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

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

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

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

BeatStar

2021/11/16 11:57 編集

コードは"<code>"または"<コード>"のボタンを押して出てくるヤツの中に書きましょう。 今のままでは読みづらいです。 それと、 > このプログラムを手直ししてもらえると助かります と言うのなら失礼ながら、プログラミング向いていないと思います。 そもそもプログラミングというのは『こう書けばいい』というものではありません。 デバッグも含みます。 ある意味、DIYと一緒です。「俺はDIYがやりたい」とか「俺はDIYが趣味だ」と言う人が、 「椅子を作ってみたが、高さが合わない。誰か修繕してくれ」とか「椅子を作りたいが、設計図を書くのが面倒。誰か書いてくれ。それと実際に作るまでやってくれ」と言いますかね? それならいっそやめた方がいいですよね。 DIYは自分で設計図を書いて、(設計図をもとに)自分で作り、高さが合わない等のような問題が発生したらそれに対処する。つまり修繕までする。 これが出来て初めてDIYと言えるはずです。 それなのに、「(椅子を作ったが)誰か修繕してくれ」と言いますかね? プログラミングも一緒です。自分で設計し、自分でコーディングし、自分でデバッグまでする。 これが当たり前です。 それすらしようとすらしないのならやめた方がいいです。控えめに言って。 (デバッグの)やり方が分からないのであればそれを聞くべきです。 今のままでは「他人任せ」で「丸投げ」です。
BeatStar

2021/11/16 11:50

あ、ヒントぐらいなら出しますよ?
guest

回答2

0

これで一応動くようになったかと思います。
試してみて下さい。

sample

1import random 2import tkinter as tk 3import tkinter.ttk as ttk 4from tkinter import messagebox as tkm 5 6#ウィンドウの作成 7root = tk.Tk() 8root.title("ゲーム") 9cv = tk.Canvas(root, width = 1000, height = 400) 10cv.pack() 11 12#回答用のテキストボックス 13entry = tk.Entry() 14entry.configure(state='normal', width=20) 15entry.pack() 16 17#初期状態 18def syoki(): 19 global x 20 global label 21 x=random.randint(10000,100000) 22 label=tk.Label(master=root,text=x,font=("メイリオ",50,"normal")) 23 24#画面を描画する関数 25def draw_objects(): 26 cv.delete('all') # 既存の描画を破き 27 28#数字を動かす関数 29def move(flag,i): 30 if(flag==True): 31 i+=1 32 33 label.place(x=i,y=150) 34 label.after(2,lambda: move(flag,i)) 35 36#正解の表示する(OKを押した時)関数 37def click1(): 38 word = entry.get() 39 if word == "": 40 tkm.showerror('エラー', '入力されていません') 41 return 42 else: 43 entry.delete(0, tk.END) 44 if(x==int(word)): 45 m="正解" 46 else: 47 m="不正解" 48 global message 49 50 message = tk.Message(root,text=m,font=("",50),width=50) 51 message.pack() 52 53#quitを押した時の関数 54def click2(): 55 root.destroy() 56 57#once againを押した時の関数 58def click3(): 59 message.pack_forget() 60 move(flag,i) 61 62#resetを押した時の関数 63def click4(): 64 message.pack_forget() 65 syoki() 66 move(flag,i) 67 68#ゲームループの関数 69def game_loop(): 70 draw_objects() 71 root.after(1500, game_loop) 72 73#ボタンの定義 74button1 = tk.Button(root, text='OK', command=click1) 75button1.place(x=600, y=405) 76button2 = tk.Button(root, text='quit', command=click2) 77button2.place(x=640, y=460) 78button3 = tk.Button(root, text='once again', command=click3) 79button3.place(x=300, y=460) 80button4 = tk.Button(root, text='reset', command=click4) 81button4.place(x=700, y=460) 82 83#ゲームの開始 84syoki() 85i=0 86flag=True 87move(flag,i) 88game_loop() 89 90 91root.mainloop() # ゲームウィンドウを表示

投稿2021/11/17 02:10

ekTJ

総合スコア109

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

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

0

コード・エラーコードなど丸々記載し頂かないと回答するのは厳しいです。
良かったら記載し直して頂けますでしょうか。

投稿2021/11/17 01:18

ekTJ

総合スコア109

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問