2 回答

TA贡献1864条经验 获得超6个赞
这是一个人为的例子,它都有一个改变年龄的按钮,并且每秒都会更新一次时间。
它使用上下文管理器执行此操作,该管理器保留插入光标,然后插入或删除您想要的任何文本。这不是特别好的编码风格,但它显示了 tkinter 可以用它的文本小部件做什么。
import tkinter as tk
from datetime import datetime
from contextlib import contextmanager
@contextmanager
def preserve_insert_cursor(text):
"""Performs an action without changing the insertion cursor location"""
saved_insert = text.index("insert")
yield
text.mark_set("insert", saved_insert)
def change_age():
"""Change the age on line 3"""
with preserve_insert_cursor(text):
text.delete("3.5", "3.0 lineend")
text.insert("3.5", "30")
def update_time():
with preserve_insert_cursor(text):
# find all ranges of text tagged with "time" and replace
# them with the current time
now = datetime.now()
timestring = now.strftime("%H:%M:%S")
ranges = list(text.tag_ranges("time"))
while ranges:
start = ranges.pop(0)
end = ranges.pop(0)
text.delete(start, end)
text.insert(start, timestring, "time")
# call this function again in a second
text.after(1000, update_time)
root = tk.Tk()
header = tk.Frame(root, bd=1, relief="raised")
text = tk.Text(root)
header.pack(side="top", fill="x")
text.pack(fill="both", expand=True)
button = tk.Button(header, text="Button", command=change_age)
button.pack(side="right", padx=10)
# insert "Time:" with no tags, "<time>" with the tag "time",
# and then a newline with no tags
text.insert("end", "Time: ", "", "<time>", "time", "\n")
text.insert("end", "Name: John\n")
text.insert("end", "Age: 32\n")
text.insert("end", "Gender: Male\n")
update_time()
root.mainloop()
您无法从静态屏幕截图中分辨出来,但如果您运行代码,您会看到时间会实时更新,即使您正在键入。
添加回答
举报