Canvas.scale输出渲染并不总是相同

时间:2016-10-16 05:16:01

标签: macos python-3.x animation tkinter tkinter-canvas

我做了第一个简单的tkinter工具。它通过FTP连接到服务器并上传文件(它用于餐馆的菜单卡以便在他们的服务器上运行)。 这一切都很好。 我试图制作一个表明上传的动画。而且有一个问题。

  • 主类继承自Tk
  • inits菜单,按钮等,相关:self.anim = Canvas(self, width=500, height=300) # Canvas for Animation self.anim.grid(column=0, row=5)
  • 最终,在上传时会调用self.animation()
  • 在那里我通过create_...方法绘制了一台PC,然后应该是什么卡,缩小屏幕并上升。运行我看到5个运行中的4个运行它应该如何显示(到目前为止),但有时它看起来它呈现动画两次(因子的第二个双倍)并且这些是重叠的,缩放两倍大并且远远超出意图停止...... 这不是一个好兆头,相同的输入,不同的输出。有谁能解释为什么会这样?

    x0, y0, x1, y1 = (185, 100, 190, 110)   # menucard
    ix0, iy0, ix1, iy1 = (187, 102, 189, 104)  # menucard's "image"
    self.speisekarte = self.anim.create_rectangle(x0, y0, x1, y1,   # menucard
                                                  outline='#bbb', fill='#fef',
                                                  stipple='gray75', tag='karte')
    self.karteimg = self.anim.create_rectangle(ix0, iy0, ix1, iy1,  # menucard's "image"
                                               outline='#f77', fill='#f57',
                                               stipple='gray50', tag='karte')
    self.anim.create_line(185, 100, 185, 109, tag='karte')
    self.anim.update()
    
    for z in range(13):
        self.anim.after(100, self.zoom())
    
    for z in range(50):
        self.anim.after(50, self.move())
    
    
    self.anim.create_text(350, 50, text='O N L I N E !', fill='#f57')
    

    def zoom(self): self.anim.scale('karte', 185, 110, 1.09, 1.06) self.anim.update()

    def move(self): self.anim.move('karte', 2, -1) self.anim.update()

1 个答案:

答案 0 :(得分:0)

@furas帮我解决了问题。从那里我必须找到退出该功能的方法。我现在发现了一个例子,所以现在它对我有用:

def animdrawUpload(self): while self.move(): pass return True

def move(self):
    if self.anim.coords('karte')[0] > 300:
        return False
    self.anim.move('karte', 2, -1)
    self.anim.update()
    self.anim.after(100, self.move)
    return True

最终我不得不希望我在windows10上得到相同的结果;)