2016-12-10 5 views
1

Pythonにはまったく新しくありません。単にtkinterを使って基本的なゲームを作るだけです。私は私のメインプログラムでタグを使うことはできますが、自分の関数でタグを作成すると無視されます。以下はコードの問題部分です。宇宙人はうまくいく。タグは保存され、使用可能です。しかし、関数内で行を作成する場合、タグをどのように割り当てても、保存されません。私は変数/ itemconfig /の代わりにtag/tags/stringを試しました。bob =/master.bob =Python 3.5のtkinter canvasは、関数内にタグを作成できないようです。

私は考えがありません。

from tkinter import * 
import random 

master = Tk() 
w = Canvas(master, width=600, height=800,bg='black') 
w. pack() 

bang = 0  #check if there's a shot active 
shottag = "1" 
alientag = "a" 

def control(event): 
    global bang,shottag 

    key = event.keycode 
    if key == 38:     #up arrow 
     if bang<3: 
      bang=bang+1 
      shottag=shottag+"1" 
      xy = w.coords(ship) 
      w.create_line(xy[0],700,xy[0],730,fill="white",width=3,tag=shottag) 
      # w.coords(shottag) would produce [] here -- i.e. no coords 

shippic = PhotoImage(file = "ship.gif") 
ship = w.create_image(300, 750, anchor=CENTER, image=shippic) 

aliens = PhotoImage(file = "head.gif") 
w.create_image(random.randint(40,560), 40, anchor=CENTER, image=aliens, tag=alientag) 

w.after(100,moveals,alientag) 
# this tag works fine 

master.bind('<Key>',control) 
+0

「ダム」の質問でも構いません。私たちはすべてここに学びます。 – GreenHawk1220

+0

あなたはタグが作成されていないと思いますか? –

+0

コードが作成されていないことを知っています。なぜなら、cords()コマンドはそれを見ないし、.find_withtag()やgettags()もしません。 そして私はそれが返品とは関係ないことを知っています。私がそれを作成した直後の機能の中にタグは見られません。 – user7278007

答えて

0

あなたはそれがタグとして扱われていないので、それはitem handlerのように見えるように、数字だけを持ってタグを作成します。

タグでcharを使用します。 shottag = "s" - それが動作します。 effbot.org The Tkinter Canvas Widgetから


タグ

は、アイテムに添付のシンボリック名があります。タグは普通の文字列で、空白( はアイテムハンドルのように見えない限り)を含むことができます。

+0

ありがとうございます。私はそのサイトにいて、その情報を見逃していました。それは働いている。 – user7278007

0

関数内で使用される変数を返す必要があります。例えば:私はaで行ったようにあなたは、変数を返すと、それを再度割り当てる必要がありますので、

a = 5 
b = 6 
def func(a,b): 
    a += 5 
    b += 5 
    return a 
a = func(a,b) 
print(a) #10 
print(b) #6, not 11 

それは、関数内の変数を変更しません。 bは、関数値に再割り当てしないかぎり変更されません。

あなたが複数の値を返す必要がある場合:

return [a, b] 
f = func(a, b) 
a, b = f[0], f[1] 
+0

ありがとうございます。タグを関数の中で作成した直後の行にタグが存在しない場合、戻り値は役に立ちません。 いいえ簡単な例:) – user7278007

関連する問題