リンク集
ウィンドウ関連
ウィンドウ表示
# coding:utf-8
import tkinter as tk
#ウィンドウを作る
root = tk.Tk()
#ウィンドウを表示
root.mainloop()
as tkの部分は、tkinterを省略表記している。これ以降「tk」と表記するだけで、「tkinter」を使う意味と同じになる。
またroot~の2行はウィンドウを表示するときの決まり文句である。
ウィンドウサイズの変更
root.geometry("400x150")
このように打てばウィンドウのサイズを調節できる。形状としては(幅×高さ)となっており、この場合だと[400×150(ピクセル)]のウィンドウが出来上がる。しかし、かける(×)のマークではなく、エックス(x)を使う点には注意が必要である。
ウィンドウタイトル設定
root.title("数当てゲーム")
titleメソッドを実行し、「.title("~")」と入力すると、ウィンドウのタイトルが「~」に設定される。
結果
ここまでのプログラムを実行してみると、下のように表示される。
メッセージと入力欄の配置
<最終的な完成例>
# coding:utf-8
import tkinter as tk
root = tk.Tk()
root.geometry("400x150")
root.title("数当てゲーム")
labell=tk.Label(root,text="数を入力してね",font=("Helvetica",14))
labell.place(x=20,y=20)
editbox1=tk.Entry(width=4,font=("Helvetica",28))
editbox1.place(x=120,y=60)
root.mainloop()
メッセージの配置
labell=tk.Label(root,text="数を入力してね",font=("Helvetica",14))
「root」にてラベルを貼り付ける対象となるウィンドウを決め、「text=""」の部分がメッセージとして表示される。
ここまではラベルを作成する作業。
labell.place(x=20,y=20)
「(x=x座標,y=y座標)」という形でウィンドウに配置する。
この場合はx座標が20,y座標が20の位置に配置することとなる。
入力欄の配置
editbox1=tk.Entry(width=4)
「width」はテキスト入力欄の幅であり、文字を4個入力させるため「=4」としている
これを「editbox1」という変数に代入。
editbox1.place(x=120,y=60)
ウィンドウに配置する行程でラベル配置の時と同様である。
フォントの種類・サイズ変更
labell=tk.Label(root,text="数を入力してね",font=("Helvetica",14))
「font=("フォント名",フォントサイズ)」という引数を追加。
この場合、「Helvetica」というフォントで、「14ポイント」というサイズを指定している。
editbox1=tk.Entry(width=4,font=("Helvetica",28))
これに関しても同様。
結果
ボタンが押された時のメッセージ表示
<最終的な完成例>
# coding:utf-8
import tkinter as tk
import tkinter.messagebox as tmsg
#ボタンがクリックされたときの処理
def ButtonClick():
tmsg.showinfo("テスト","クリックされたよ")
root = tk.Tk()
root.geometry("400x150")
root.title("数当てゲーム")
labell=tk.Label(root,text="数を入力してね",font=("Helvetica",14))
labell.place(x=20,y=20)
editbox1=tk.Entry(width=4,font=("Helvetica",28))
editbox1.place(x=120,y=60)
button1=tk.Button(root,text="チェック",font=("Helvetica",14),command=ButtonClick)
button1.place(x=220,y=60)
root.mainloop()
ボタンの配置
button1=tk.Button(root,text="チェック",font=("Helvetica",14))
button1.place(x=220,y=60)
Buttenメソッドを利用する。一行目で作成したボタンを「butten1」という変数に代入。
2行目はplaceメソッドを利用し、基本的にはこれまでと同様。
メッセージ表示
command=ButtonClick
ここでクリック時に関数が実行されるようになる。
#ボタンがクリックされたときの処理
def ButtonClick():
tmsg.showinfo("テスト","クリックされたよ")
1行目で関数を作り、2行目ではshowinfo関数(情報を表示する)を利用する。
showinfo("タイトル","表示したい文字")という形になる
結果
青丸の部分にボタンが追加され、チェックを押すと2枚目の画像のように表示される。
ヒット&ブローの当たり判定組み込み
<最終的な完成例>
# coding:utf-8
import random
import tkinter as tk
import tkinter.messagebox as tmsg
#ボタンがクリックされたときの処理
def ButtonClick():
#テキストが入力欄に入力された文字列を取得
b=editboxl.get()
#Lesson 5-4のプログラム
#4桁の数字かどうかを判定する
isok=False
if len(b) !=4:
tmsg.showerror("エラー","4桁の数字を入力してください")
else:
kazuok=True
for i in range(4):
if (b[i]<"0")or(b[i]>"9"):
tmsg.showerror("エラー","数字ではありません")
kazuok=False
break
if kazuok:
isok=True
if isok:
#4桁の数字であったとき
#ヒットを判定
hit=0
for i in range(4):
if a[i]==int(b[i]):
hit=hit+1
#ブローを判定
blow=0
for j in range(4):
for i in range(4):
if(int(b[j])==a[i])and(a[i] !=int(b[i]))and(a[j] !=int(b[j])):
blow=blow+1
break
#ヒットが4なら当たりで終了
if hit==4:
tmsg.showinfo("当たり","おめでとうございます。当たりです")
#終了
root.destroy()
else:
#ヒット数とブロー数を表示
tmsg.showinfo("ヒント","ヒット"+str(hit)+
"/"+"ブロー"+str(blow))
#メインのプログラム
#最初にランダムな4つの数字を作成しておく
a=[random.randint(0,9),
random.randint(0,9),
random.randint(0,9),
random.randint(0,9)]
#ウィンドウを作る
root = tk.Tk()
root.geometry("400x150")
root.title("数当てゲーム")
#ラベルを作る
labell=tk.Label(root,text="数を入力してね",font=("Helvetica",14))
labell.place(x=20,y=20)
#テキストボックスを作る
editbox1=tk.Entry(width=4,font=("Helvetica",28))
editbox1.place(x=120,y=60)
#ボタンを作る
button1=tk.Button(root,text="チェック",font=("Helvetica",14),command=ButtonClick)
button1.place(x=220,y=60)
#ウィンドウを表示する
root.mainloop()
入力されたテキストの値を取得
def ButtonClick():
#テキストが入力欄に入力された文字列を取得
b=editboxl.get()
#メッセージとして表示する
tmsg.showinfo("入力されたテキスト",b)
「editbox1」をbに代入し、チェックを押した際に別ウィンドウで表示する。
ヒット&ブローの値判定
Lesson5のプログラムと合成する。
履歴の表示
<最終的な完成形>
# coding:utf-8
import random
import tkinter as tk
import tkinter.messagebox as tmsg
#ボタンがクリックされたときの処理
def ButtonClick():
#テキストが入力欄に入力された文字列を取得
b=editbox1.get()
#Lesson 5-4のプログラム
#4桁の数字かどうかを判定する
isok=False
if len(b) !=4:
tmsg.showerror("エラー","4桁の数字を入力してください")
else:
kazuok=True
for i in range(4):
if (b[i]<"0")or(b[i]>"9"):
tmsg.showerror("エラー","数字ではありません")
kazuok=False
break
if kazuok:
isok=True
if isok:
#4桁の数字であったとき
#ヒットを判定
hit=0
for i in range(4):
if a[i]==int(b[i]):
hit=hit+1
#ブローを判定
blow=0
for j in range(4):
for i in range(4):
if(int(b[j])==a[i])and(a[i] !=int(b[i]))and(a[j] !=int(b[j])):
blow=blow+1
break
#ヒットが4なら当たりで終了
if hit==4:
tmsg.showinfo("当たり","おめでとうございます。当たりです")
#終了
root.destroy()
else:
#ヒット数とブロー数を表示
rirekibox.insert(tk.END,b+"/H:"+str(hit)+"B:"+str(blow)+"\n")
メインのプログラム
最初にランダムな4つの数字を作成しておく
a=[random.randint(0,9),
random.randint(0,9),
random.randint(0,9),
random.randint(0,9)]
ウィンドウを作る
root = tk.Tk()
root.geometry("600x400")
root.title("数当てゲーム")
履歴表示のテキストボックスを作る
rirekibox=tk.Text(root,font=("Helvetica",14))
rirekibox.place(x=400,y=0,width=200,height=400)
ラベルを作る
labell=tk.Label(root,text="数を入力してね",font=("Helvetica",14))
labell.place(x=20,y=20)
テキストボックスを作る
editbox1=tk.Entry(width=4,font=("Helvetica",28))
editbox1.place(x=120,y=60)
ボタンを作る
button1=tk.Button(root,text="チェック",font=("Helvetica",14),command=ButtonClick)
button1.place(x=220,y=60)
ウィンドウを表示する
root.mainloop()
履歴表示のテキストボックス作成
root.geometry("600x400")
ウィンドウのサイズを変更しテキストボックスを作るスペースを空ける。
rirekibox=tk.Text(root,font=("Helvetica",14))
rirekibox.place(x=400,y=0,width=200,height=400)
一行目でTextメソッドを実行し、フォントサイズを14と定める。
これをplaceメソッドを用いて、(400,0)の位置に幅200,高さ400に設定
履歴を表示
rirekibox.insert(tk.END,b+"/H:"+str(hit)+"B:"+str(blow)+"\n")
テキストボックスに文字を追加するためにinsertメソッドを追加する。
「tk END」とすることで末尾に挿入することができる。
ここではヒットは「H:」,ブローは「B:」と表示するようにしている。