Python GUI プログラミングを教えています「その3」

 今日も見に来てくださって、ありがとうございます。石川さんです。

 Python GUIプログラミング教室、先日はウィンドウを出して、サイズを変更して、背景色を変更するところまでやりました。次は、どうしようかなぁ、と、思っていましたが、やっぱりゲームなら、キャンバスが使えないとダメでしょう。と、いうことで、Canvasを作ってみましょう。

 とりあえず、ウィンドウを出すテンプレートとして、以下のスクリプトを覚えてもらいました。

import tkinter as tk

class Application(tk.Tk):
    def __init__(self):
        super().__init__()
# ここに色々な設定を書いていきます。
        
        self.mainloop()

if __name__ == "__main__":
    Application()

 サンプルとして、キャンバスを作ってみましょう。

        self.canvas = tk.Canvas()
        self.canvas.pack()

 追加しましたが、大きさが若干変化したくらいで、あんまり変わりませんね。次に線を引いてみましょう。

        self.canvas.create_line(10,10,200,200)
線が引けました

 キャンバスは、左上に原点の(0,0)があって、x軸が右、y軸が下に行くほど数値が増えていく構造です。なので上記の一行は、左上の(10,10)の座標から右下の(200,200)へ線を引く、という命令になります。ここまで教えて、さあ、自分でも好きな線を引いてみて、と、促したところ、下の二行を追加してくれました。

        self.canvas.create_line(100,100,200,200)
        self.canvas.create_line(65,65,150,150)

 当然ながら、実行しても線は増えませんね。追加した線は、もともと引いてあった線の上を引き直しているだけですからねぇ。

 次に、fill=”white”とか”red”で色が付けられることと、create_rectangleで四角形、create_ovalで楕円が書けることを教えてあげて、遊んでもらいました。最終的に何かができた、と、言っていたのですが、出来上がりは、こんな感じでした!

日の丸!

 そして、そこで終わらずに、さらに欲張って、キーボードを押されたイベントで押されたキーを出力するスクリプトを追加しました。

import tkinter as tk

class Application(tk.Tk):
    def __init__(self):
        super().__init__()

        self.canvas = tk.Canvas()
        self.canvas.pack()
        self.canvas.create_rectangle(10,50,200,160,fill="white")
        self.canvas.create_oval(80,80,130,130,fill="red")

        self.bind("<KeyPress>",self.print_key)
        
        self.mainloop()

    def print_key(self, event):
        print(event.keysym)
        
if __name__ == "__main__":
    Application()

12行目のbind"<KeyPress>"イベントに、16行目のself.print_keyメソッドを割り当てています。つまり、何かのキーが押されたよ、というイベントが発生したら、self.print_keyメソッドが実行されるようになります。print_keyの中で、event.keysymprintしています。押されたキーの内容によって、event.keysymの内容が変化します。適当にキーを押すと、出力結果は以下のようになりました。

space
a
b
c
Return
BackSpace
F1
F2
Down
Left
Up
Right
1
2
3
4
Shift_L
exclam

 この結果から、矢印キーが押されたときに何かさせようとすると、「Down」「Left」「Up」「Right」を判定すればうまくいきそうです。

 さあ、次は、、、と、思っていたら、もう疲れた~、と、またしても逃げられてしまいました。ねぇ、ホントはプログラミングしたくないんじゃないの?
 む~、それか、教え方がよくないのかなぁ。。。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。