Tkinter 如何在标题栏上显示动态时间啊 ?
from tkinter import *
import time
root=Tk()
t=StringVar()
def gyl():
t.set(time.strftime("%X"))
root.after(1000,gyl)
gyl()
root.title(t)
mainloop()
使用字符型变量来编写程序,怎么显示出时间啊? 原代码问题分析:
原代码存在两个关键问题:
1. root.title(t) 错误地将StringVar对象赋值给title
2. 缺少初始时间设置和持续更新机制
正确实现方案:
from tkinter import *
import time
root = Tk()
def update_time():
current_time = time.strftime("%H:%M:%S")# 获取当前时间
root.title(current_time) # 直接设置标题
root.after(1000, update_time) # 每秒更新一次
update_time()# 初始化调用
root.mainloop()
关键修改点说明:
[*]直接使用字符串赋值给title,而不是StringVar对象
[*]通过递归调用after()实现持续更新
[*]时间格式说明:%H=时(24小时制),%M=分,%S=秒
扩展用法:
若想添加其他固定文字,可以这样修改:
root.title(f"当前时间:{current_time}")# 使用f-string格式化字符串
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2025-5-21 18:54
原代码存在两个关键问题:
1. root.title(t) 错误地将StringVar对象赋值给title
2. 缺少初始时间设置和 ...
要求使用字符型变量( StringVar )编写程序哈! 刚尝试做了下,这好像有点难…
给个思路:开个线程,在使用stringvar.trace,每次触发就root.title改名称
不过这确实很难啊… from tkinter import *
import time
root=Tk()
def gyl():
t=StringVar(name=time.strftime("%X"))
root.title(t)
root.after(1000,gyl)
gyl()
mainloop()
这样改好像可以 快速收敛 发表于 2025-5-22 08:50
这样改好像可以
第六行 t=StringVar(name=time.strftime("%X")) ,为什么要加入 name ? 本帖最后由 快速收敛 于 2025-5-23 08:46 编辑
dragov 发表于 2025-5-22 20:16
第六行 t=StringVar(name=time.strftime("%X")),为什么要加入 name ?
首先感谢你的最佳,碰巧碰巧,看源码的,tk也没学过。我是直接拿你的代码测试,
发现右上角的title,点击进源码StringVar,继承自Variable,查看Variable的定义:
发现与刚刚title相同的,没有传入name,那么就是用默认的self._name = 'PY_VAR' + repr(_varnum)
如果传入,就是用传入的name。
修改了代码,测试发现可行{:10_254:} 快速收敛 发表于 2025-5-23 08:43
首先感谢你的最佳,碰巧碰巧,看源码的,tk也没学过。我是直接拿你的代码测试,
谢 谢 您 的 提 示 ,原 来 name 是 StringVar 属 性 中 的 一 个 参 数!
页:
[1]