リンク
復習
- ppt競争
- Mikatype試験の予行演習(どこ?ハンカチ)
- 先週の課題のコメント
学ぶ項目
隠蔽(カプセル化)
- method化
- トグル表示
- ブロックインデント(Ctrl + [, Ctrl + ])
- mdではTab, shift-Tab
- パーツ(アルゴリズムとか)の変更が容易になる
デバッグ
- 動作を予測(テスト駆動)
- 文法エラー
- printデバッグ
- 検索(Edge, Bing, co-pilot)
- アヒルちゃん
単なる見かけ(just a view)
- GUI vs CUI again
- GUIの構成要素は何?
- TkinterでGUI
mac注意
ウィンドウ画像のキャプチャ(捕獲, capture)
mac
- command-shift-4 spaceでwindowをクリック
- 最近の項目からファイルを選択,移動
windows11
- PrtSc key をキーボードで押す
- windowを選ぶとcopyされる
- mdでpasteするとファイルを自動生成
- snipping tool を検索ボックスで探す
- ウィンドウモード選択
- 画面をクリック
- 右下の画面を選択して,クリップからファイルに保存
markdownに
-
画像を貼り付けてcodeで表示
![tkinter_sample](./FILE_NAME.png)
課題
python code
- Lesson6-2を参照して,tkinterで400x150の数当てゲームの画面を作りなさい.
- Lesson6-3を参照して,入出力を操作するcodeを書きなさい.
- Lesson6-4を参照して,ボタンを押された時にメッセージを表示しなさい.
- Lesson6-5を参照して,hit&blowの当たり判定を組み込みなさい.
- Lesson6-6を参照して,遊びやすいゲームにしなさい.
- 完成版(tkinter_hab.py)をLUNAに提出しなさい.
-
オプション課題(採点対象外)
- 先週のオプション課題のリンクを参照して完動チェック版にしなさい.
- md, py, pngを含めたdirectoryごとLUNAに提出しなさい.
課題の復習
正常動作してない.pyがいくつかあった.
./d10_tkinter/c6_comp_method.py
import tkinter as tk
import tkinter.messagebox as tmsg
import random
def setup_window():
global rirekibox, editbox1
root.geometry("600x800")
root.title("数あてゲーム")
root.bind('<Return>', ButtonClick) # here is a trick!!!
rirekibox = tk.Text(root, font=(("Helvetica", 14)))
rirekibox.place(x=400, y=0, width=200, height=800)
label1 = tk.Label(root, text="数を入力してね", font=("Helvetica", 14))
label1.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)
def mk_four_digit_number():
a = [random.randint(0, 9),
random.randint(0, 9),
random.randint(0, 9),
random.randint(0, 9)]
print(a)
return a
def check_input_number():
b = editbox1.get()
if len(b) != 4:
tmsg.showerror("エラー", "4桁の数字をいれてね")
return
for i in range(4):
if (b[i] < "0") or (b[i] > "9"):
tmsg.showerror("エラー", "b["+str(i)+"]は数字ではありません.")
return
return [int(b[0]),int(b[1]), int(b[2]), int(b[3])]
def check_hit_and_blow(answer, trial):
blow, hit = 0, 0
if trial is None:
return 0,0
answer = answer[:] # 浅いコピー
trial = trial[:] # 浅いコピー
for i in range(len(trial)):
if trial[i] == answer[i]:
answer[i] = trial[i] = None
hit +=1
for i in range(len(answer)):
for j in range(len(trial)):
if (answer[i] == None) or (trial[j] == None):
continue
if answer[i] == trial[j] :
answer[i] = trial[j] = None
blow+=1
return hit, blow
def ButtonClick(event=None):
b = check_input_number()
hit, blow = check_hit_and_blow(a,b)
rirekibox.insert(tk.END, str(b) + " h:"+str(hit)+" b:"+str(blow)+"\n")
if hit == 4:
tmsg.showinfo("あたり", "おめでとうさん.あたりでっせ.")
root.destroy()
a = mk_four_digit_number()
root = tk.Tk()
setup_window()
root.mainloop()
- source ~/Desktop/lecture_24s/comp_a24/d7_11_python/d10_tkinter.org