【发布时间】:2019-11-22 17:17:37
【问题描述】:
我正在做一个模拟,其中一些相同类别的立方体随机移动。我的目标是在它们满足某些特征(例如它们的对象编号)时,为它们提供另一种移动模式。
我的问题:
如果它们满足特征,我如何“关闭”第一个移动模式并激活下一个?
这是一个非常简化的模拟示例,以及它是如何工作的:
from tkinter import *
from random import *
class Cubes:
def __init__(self, master, canvas, number, x1, y1, color):
self.master = master
self.canvas = canvas
self.number = number
self.x1 = x1
self.y1 = y1
self.x2 = x1 + 15
self.y2 = y1 + 15
self.color = color
self.rectangle = canvas.create_rectangle(x1, y1, self.x2, self.y2, fill=color)
def movement(self):
self.x = randint(-10, 10)
self.y = randint(-10, 10)
canvas.move(self.rectangle, self.x, self.y)
if self.number == 2:
def movementII(self):
canvas.move(self.rectangle, 0, 0)
self.canvas.after(100, self.movementII)
self.canvas.after(100, self.movement)
if __name__ == "__main__":
master = Tk()
canvas = Canvas(master, width=900, height=600)
canvas.pack()
master.title("Simulation")
cube = Cubes(master, canvas, 2, randint(50, 800), randint(25, 500), "black")
cube.movement()
mainloop()
【问题讨论】:
-
通用的
after()小部件方法返回一个整数“后标识符”,如果要取消回调,可以将其传递给after_cancel()方法。这就是您可以“关闭”它们的方式。要拥有可变的运动模式,您需要将其抽象为Cube类的属性。
标签: python class object tkinter