【问题标题】:How to prevent text overlap on tkinter canvas如何防止 tkinter 画布上的文本重叠
【发布时间】:2014-11-17 12:41:09
【问题描述】:

这是一个简单的程序,旨在获取服务器延迟、投影它并在小画布上刷新它,但是我无法找到防止文本重叠的方法,并且新的 ping 仍然叠加在老 ping。

from tkinter import *
from PIL import ImageTk, Image
import subprocess
import time

host = "141.101.115.212" #host IP address

master = Tk()

im = Image.open("image.png")
width, height = im.size
canvas = Canvas(master, width=width, height=height)
canvas.pack()
image = ImageTk.PhotoImage(file="image.png")
canvas.create_image(0, 0, image=image, anchor=NW)


def display():

    x = subprocess.Popen(["ping.exe", "141.101.115.212"], stdout=subprocess.PIPE)
    x = str(x.communicate()[0])
    lhs, rhs = x.split("Average = ")
    lhs, rhs = rhs.split("\\", 1)
    print(lhs)

    latency = lhs

    text = canvas.create_text(40, 100, anchor=NW)
    canvas.itemconfig(text, text=latency, width=width)
    canvas.itemconfig(text, font=("courier", 70, "bold"))
    canvas.itemconfig(text, fill="white")

    master.after(100, display)

    #time.sleep(1)
    #canvas.delete(text)
    #canvas.update()
    print("iteration")

master.after(0, display)
master.mainloop()

【问题讨论】:

    标签: python tkinter tkinter-canvas


    【解决方案1】:

    不要每次都创建一个新的文本项。相反,只需更改旧项目的文本即可。

    canvas.itemconfigure(text, text=new_latency)
    

    您的另一个选择是在创建新项目之前删除旧项目,但最好只重用旧项目。

    【讨论】:

    • 我是古玩,master.after(100, display) 是否意味着函数 display 将每 100 毫秒(即 1/10 秒)调用一次?因为对我来说似乎需要更长的时间。
    • 表示过了100ms后会尽快调用。
    • @user4261180,请标记答案已接受,以便其他查看问题列表的人知道答案正确(确实如此)。
    • @BryanOakley 我该怎么做?
    • @user4261180:你是怎么做的?我的回答显示了如何更改文本。你还需要什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    相关资源
    最近更新 更多