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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1791閲覧

エラーメッセージは出ないけど、動きません

yamasita_uruki

総合スコア29

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/01/23 23:50

編集2021/01/24 01:19

import tkinter

key=""
def key_down(e):
global key
key =e.keysym

def key_up(e):
global key
key=""

cx=400
cy=300
def main_proc():
global cx,cy
if key=="Up":
cy =cy - 20
if key=="Down ":
cy=cy + 20
if key=="Left":
cx=cx - 20
if key=="Right":
cx=cx + 20
canvas.coords("MYCHR",cx,cy)
root.after(100,main_proc)

root=tkinter.Tk()
root.title("移動するネコ")
root.bind("<KeyPress>",key_down)
root.bind("KeyRelease>",key_up)
canvas=tkinter.Canvas(width=800,height=600,bg="lightgreen")
canvas.pack()
img=tkinter.PhotoImage(file="mimi.png")
canvas.create_image(cx,cy,image=img,tag="MYCHR")
main_proc()
root.mainloop()
#このコードの目的としては画像がキーを押したら動くっていうものを作りたいのですがまったくキーを押しても動きません
どー解決したら良いか教えてください

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

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

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

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

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

y_waiwai

2021/01/23 23:52

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答1

0

ベストアンサー

以下の2箇所を修正してください。

  • ↓キー入力時の判定を行なう文字列に余分な空白が混入しており、判定に失敗する。
  • キーを離したときのイベントに対するコールバックにkey_upを登録するはずが、文字列に<が抜けているためkey_upが呼ばれない。

Diff

1- if key=="Down ": 2+ if key=="Down":

Diff

1-root.bind("KeyRelease>",key_up) 2+root.bind("<KeyRelease>",key_up)

修正後のプログラムは以下の通りです。

Python

1import tkinter 2 3key = "" 4 5 6def key_down(e): 7 global key 8 key = e.keysym 9 10 11def key_up(e): 12 global key 13 key = "" 14 15 16cx = 400 17cy = 300 18 19 20def main_proc(): 21 global cx, cy 22 if key == "Up": 23 cy = cy - 20 24 if key == "Down": 25 cy = cy + 20 26 if key == "Left": 27 cx = cx - 20 28 if key == "Right": 29 cx = cx + 20 30 canvas.coords("MYCHR", cx, cy) 31 root.after(100, main_proc) 32 33 34root = tkinter.Tk() 35root.title("移動するネコ") 36root.bind("<KeyPress>", key_down) 37root.bind("<KeyRelease>", key_up) 38canvas = tkinter.Canvas(width=800, height=600, bg="lightgreen") 39canvas.pack() 40img = tkinter.PhotoImage(file="mimi.png") 41canvas.create_image(cx, cy, image=img, tag="MYCHR") 42main_proc() 43root.mainloop()

投稿2021/01/24 01:36

編集2021/01/24 01:40
Daregada

総合スコア11990

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

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

Daregada

2021/01/24 10:06

key_upを呼ばない状態の動き(一度押したキーの方向に延々と動き続ける)もなかなか味がありました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問