【问题标题】:Updating multiple create_text objects in Tkinter Canvas在 Tkinter Canvas 中更新多个 create_text 对象
【发布时间】:2019-10-22 21:35:24
【问题描述】:

我想不断更新覆盖在具有背景的画布上的时间输出。当文本在标签上时我可以这样做,但是标签不允许我添加多个文本对象而不在文本周围创建背景。我可以添加一个静态时间,但是当我尝试创建一个函数来简单地创建一个文本时,我似乎得到了一个错误

所以这段代码可以正常工作:

timenow = time.strftime('%H:%M:%S')

root = Tk()
c = Canvas(root, width = 500, height = 333)
c.pack()
image = PhotoImage(file = 'C:/Users/Khalid Byra/Desktop/Python Alarm Clock Project/wallpaper.gif')
c.create_image(0, 0, image=image, anchor=NW)
c.create_text(250, 166.5, text = timenow, font=('Arial', 24), fill = 'white', anchor = CENTER)

但是,当我尝试将其更改为这样的方法时:

c.create_image(0, 0, image=image, anchor=NW)
def write(x=250, y=166.5, text=timenow, font=('Arial', 24), fill='white', anchor=CENTER):
    c.create_text(x, y, text, fill, anchor, text)
write()

我收到以下错误:

*(args + self._options(cnf, kw))))

_tkinter.TclError:未知选项“22:27:34”

【问题讨论】:

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


    【解决方案1】:

    好吧,没关系,我想通了,应该这样做:

    def write(x=250, y=166.5, text=timenow, font=('Arial', 32), fill='white', anchor=CENTER): c.create_text(x, y, text=text, fill=fill, anchor=anchor)

    我的下一个问题是我正在使用这种方法来更新时钟:

    def tick():
        global timenow
        time2 = time.strftime('%H:%M:%S')
        if time2 != timenow:
            timenow = time2
            write(text = time2)
        c.after(200, tick)
    
    tick()
    

    但这里的问题是它会将新文本放在旧文本之上,使其变得一团糟。所以现在我需要弄清楚在新文本出现时删除旧文本?但它没有分配给变量,所以我不确定如何

    【讨论】:

    • 嗯,你需要把它赋值给一个变量,以便你以后可以引用它。请注意,简单地更改现有项目的文本(通过画布上的.itemconfig())比不断删除和重新创建项目更有效,并且可能更简单。
    • 谢谢 我刚刚想通了,之前尝试过 itemconfig() 但我没有写,以下代码完美运行: def tick(): global timenow time2 = time.strftime( '%H:%M:%S') if time2 != timenow: timenow = time2 c.itemconfigure(a, text = time2) c.after(200, tick)
    猜你喜欢
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 2014-09-15
    • 2013-10-13
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多