Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

コンピュータ演習A 23 : d10(6/12) Python-IV(chap 6), GUI=単なる見かけ

Last updated at Posted at 2023-06-12

リンク

復習

学ぶ項目

隠蔽(カプセル化)

  • 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

  1. Lesson6-2を参照して,tkinterで400x150の数当てゲームの画面を作りなさい.
  2. Lesson6-3を参照して,入出力を操作するcodeを書きなさい.
  3. Lesson6-4を参照して,ボタンを押された時にメッセージを表示しなさい.
  4. Lesson6-5を参照して,hit&blowの当たり判定を組み込みなさい.
  5. Lesson6-6を参照して,遊びやすいゲームにしなさい.
  6. 完成版(tkinter_hab.py)をLUNAに提出しなさい.
  7. オプション課題(採点対象外)
    1. 先週のオプション課題のリンクを参照して完動チェック版にしなさい.
    2. 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
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?