私はこれをテンプレートとして使用しています:
私が見つけることができる唯一の違いは、彼が次の行を使用していることです。
from Tkinter import *
一方、私はラインを使用します
import Tkinter as Tk
これは、Tkinter モジュールへのすべての呼び出しを Tk.(Blob.py に相当) として行うことで説明できると思いました。このブロブ アニメーションの例を実行できますが、プログラムでエラーが発生します。
'Nonetype' object not callable
行で:
allStars[i] = allStars[i]()
以下の私のコードから(この特定の行はコードの最後のブロックにあります):
class Star:
def __init__(self, canvas, xy, delta):
self.canvas = canvas
self.delta = delta
self.id = self.canvas.create_rectangle(
xy[0],xy[1],
xy[0]+starSize,xy[1]+starSize,
fill='white'
)
def __call__(self):
return self.down
def down(self):
xy = self.canvas.coords(self.id)
if xy[1] >= gameScreenHeight:
x2 = random.randint(1,gameScreenWidth)
y2 = 0;
self.canvas.coords(self.id,x2,y2)
else:
self.canvas.move(self.id, 0, self.delta)
root = Tk.Tk()
root.title("Stars")
root.resizable(0,0)
TkPlacement = "%dx%d%+d%+d" % (gameScreenWidth, gameScreenHeight, 10*starSize, heightOffset)
root.geometry(TkPlacement)
frame = Tk.Frame(root, bd = 5, relief=Tk.SUNKEN)
frame.pack()
space = Tk.Canvas(frame, width = gameScreenWidth, height = gameScreenHeight, cursor = 'plus')
space.pack()
space.create_rectangle(0,0,gameScreenWidth,gameScreenHeight,fill="black")
allStars = [
Star(space, (10,30),3),
Star(space, (15,60),3),
Star(space, (80,50),5)
]
#N = 99;
#for i in range(N):
# x1 = random.randint(1,gameScreenWidth)
# y1 = random.randint(1,gameScreenHeight)
# aStar = Star(space, (x1,y1), 3)
# allStars.append(aStar)
root.update()
try:
while 1:
for i in range(len(allStars)):
allStars[i] = allStars[i]()
root.update_idletasks() # redraw
root.update() # process events
except Tk.TclError:
pass # to avoid errors when the window is closed