簡體   English   中英

tkinter的canvas.move使對象消失

[英]tkinter's canvas.move makes object disappear

我正在使用tkinter作為可視化工具在python 2.7中運行生物模擬器。 該地圖由正方形組成,其中顏色代表土地類型,紅色正方形代表生物。 我使用canvas.move在板上移動那個紅色正方形。 它必須移動很多。 但是我確切知道它應該在哪里開始和應該在哪里結束。 問題是,大多數情況下它沒有移動,而是消失了。 在下面的代碼中,我在Simulation的init中調用move,它可以工作。 當我在sim.simulate中隨時調用它時,該生物便消失了。 誰能解釋為什么?

 class Map():
        def __init__(self,):
            self.root = Tk()
            self.canvas = Canvas(self.root, width=1200, height=1200)
            self.canvas.pack()
            self.colors = {
                "Land": "grey",
                "Food": "green",
                "Water": "blue",
                "Shelter": "black"
            }
            self.canvasDict = {}  # the keys are (x,y, "type"), the data is the id so it can be grabbed for item config.
            for i, row in enumerate(land.landMass):
                for j, tile in enumerate(row):
                    color = self.colors[tile.__class__.__name__]
                    self.canvasDict[i, j, "tile"] = self.canvas.create_rectangle(50 * i, 50 * j, 50 * (i + 1), 50 * (j + 1),
                                                                                 outline=color, fill=color)
                    info = tile.elevation
                    if color == "green":
                        info = tile.vegitation
                    elif color == "black":
                        info = tile.quality

                    self.canvasDict[i, j, "text"] = self.canvas.create_text(50 * i + 3, 50 * j, anchor=NW, fill="white", text=info)
            self.canvasDict["creature"] = self.canvas.create_rectangle(0, 0, 50, 50,
                                                                       outline="red", fill="red")
            self.canvas.pack(fill=BOTH, expand=1)
            sim = Simulation([], 1, 2, self.root, self.canvas, self.canvasDict)
            self.root.after(1000, sim.simulate)

...其他功能...

 def simulate(self):
        self.canvas.move(self.canvasDict["creature"], 1, 1)

        if self.generations > 0:
            self.root.after(10000, self.canvas.move, self.canvasDict["creature"], 2 * 50, 2 * 50)
            ...

我終於意識到發生了什么事。 我誤以為.move會將對象移動到畫布上的該位置,而是將其移動那么多。 因此,當我的方塊“消失”時,它實際上只是在移動可見的畫布。 我以為.after會使動作停頓,以便我可以看到這種情況,但顯然不會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM