【发布时间】:2016-10-16 05:16:00
【问题描述】:
我做了第一个简单的 tkinter 工具。它通过 FTP 连接到服务器并上传文件(用于将餐厅的菜单卡放在他们的服务器上)。 所有这一切都很好。 我正在尝试制作指示上传的动画。还有一个问题。
- 主类继承自 Tk
- 初始化菜单、按钮等相关:
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()
【问题讨论】:
-
after需要函数名称 - 这意味着没有() -
你说得对,这似乎是个问题!现在它快得要命了。那么,被调用函数之外的执行不会等待吗?在缩放/移动之前很久,它总是以
create_text结束。 -
您在所有
after()中使用相同的时间,因此所有zoom()都同时执行。您需要after(100,...)、after(200, ...)等,或者您可以在zoom()中使用after(),例如在函数clock example 中update_time()中使用update_time()
标签: macos python-3.x animation tkinter tkinter-canvas