无法在单独的函数中编写动画代码,tkinter



我有以下代码,其中我使类显示的许多实例,然后在每个类中调用函数display,它显示数据

from tkinter import *
class Display:
def __init__(self, x, y):
self.x = x
self.y = y
def display(self):
canvas.create_oval(self.x,self.y,self.x+10,self.y+10,fill="lime")
def show(inst):    
makeFun = Tk()
canvas = Canvas(makeFun, width=800, height=700)
makeFun.title("Test Evolution")
canvas.pack()
instance = [Display(random.randrange(300,700),random.randrange(300,700)) for a in range(inst)]
for a in range(inst):
instance[a].display()
canvas.mainloop()

但是当我调用该函数时...

show(10)

它返回一个错误,指出:

NameError: name 'canvas' is not defined

在函数中创建的变量local,您无法在其他函数中访问它,因此应将其作为参数发送

def display(self, canvas):

item.display(canvas)

顺便说一句:名称Item更适合此类,因为它是您将显示的项目/对象。

您可以使用首选方法处理列表 - 无需range()

for item in instances:
item.display(canvas)

完整工作示例

import tkinter as tk # `import *` is not preferred
import random
class Item:
def __init__(self, x, y):
self.x = x
self.y = y
def display(self, canvas):
canvas.create_oval(self.x, self.y, self.x+10, self.y+10, fill="lime")
def show(inst):    
root = tk.Tk()
root.title("Test Evolution")
canvas = tk.Canvas(root, width=800, height=700)
canvas.pack()
instances = [Item(random.randrange(300,700),random.randrange(300,700)) for a in range(inst)]
for item in instances:
item.display(canvas)
root.mainloop()
show(100)    

最新更新