【发布时间】:2025-12-10 19:50:02
【问题描述】:
我一直用这个作为模板:
几乎我能找到的唯一区别是他使用了这条线:
from Tkinter import *
而我使用这条线
import Tkinter as Tk
我认为我通过将所有对 Tkinter 模块的调用都作为 Tk.(Blob.py 等效项)来解释这一点。我可以运行这个 blob 动画示例,但我的程序出现错误:
'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
【问题讨论】: