【问题标题】:How to redraw on a line in Tkinter canvas如何在 Tkinter 画布中重绘一行
【发布时间】:2019-04-09 13:22:06
【问题描述】:

我在 tkinter 画布中有一些线条,也有它们的代码。我想让它们变红但不是瞬间变红,我想在它们上再画一条线(红线),但需要不同的时间。例如,对于一条特定的线,这条线应该需要 3 秒才能变红,而另一条线应该需要 7 秒才能变成红色。这就像在前一条上画了另一条红线。

   def activator(self, hexagon, duration_time):
        if not hexagon.is_end:
            self.canvas.itemconfigure(hexagon.drawn, fill="tomato")
            self.canvas.itemconfigure(hexagon.hex_aspects.outputs.drawn, fill="tomato")

例如,我希望由 tkinter 的 create_polygon 方法创建的六边形变红,但不会立即变红。它应该与第二个变量duration_time 有关。我的意思是它应该在 duration_time 秒内完成(比如说 3 秒)。 有没有办法做到这一点?我的画布上有很多物体,它们应该在特定时间变红。线、圆、多边形……

【问题讨论】:

  • 欢迎来到 Stackoverflow。为了改进这个问题,向我们展示你做了什么。显示源代码并描述它在做什么以及你需要它做什么。见How to create a Minimal, Complete, Verifiable example
  • 谢谢你,没关系,可以是其中任何一个,我只想让它变红但我不想让它在眨眼间变红,它应该需要一些时间(比如说 4 秒)它可以通过重绘或其他任何方法来完成,但我不知道如何?

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


【解决方案1】:

要做到这一点,你可以在它上面绘制,并有一个函数来绘制不同的时间:

import time
def redraw(delay, color, canvas):
    time.sleep(delay)
    #some parentheses are for the arguments
    (canvas).create_(shape)(blah, outline=(color), fill=(color))

对于每个形状,但对于线条,您不需要进行填充参数。

【讨论】:

  • 虽然这确实解决了不同时间的问题,但将 time.sleep() 合并到 GUI 循环中,尤其是多秒,将导致主线程暂停该时间长度并冻结应用。相反,使用 .after() 安排重绘。
【解决方案2】:

要在画布中绘制东西,请使用 create 方法添加新项目。

from Tkinter import *

master = Tk()

w = Canvas(master, width=200, height=100)
w.pack()

w.create_line(0, 0, 200, 100)
w.create_line(0, 100, 200, 0, fill="red", dash=(4, 4))

w.create_rectangle(50, 25, 150, 75, fill="blue")

【讨论】:

    猜你喜欢
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2021-10-30
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多