这个剧本我已经有一段时间了。但是,它只有在我从空闲状态启动时才会运行;如果我试图从桌面运行它,它就不会启动。这是一个用Tkinter制成的钟。在
import time
from tkinter import *
def showTime():
canvas.delete('text')
if True:
actualTime = time.localtime()
text = canvas.create_text((100,50,),
text =(actualTime[3],actualTime[4],actualTime[5]),
fill="white",
font=("Verdana",20,"bold"),
tag="text")
root.after(1000,showTime)
if "__main__" == __name__:
root = Tk()
root.resizable(False,False)
root.title("Clock")
canvas = Canvas(root, width=200, height=100,bg="black",cursor="target")
canvas.create_rectangle((20,20),(180,80),outline="ghostwhite")
canvas.pack()
showTime()
你需要启动Tkinter主循环。只要加上
在你的剧本后面
^{pr2}$打电话。在
您的脚本在IDLE中工作的原因是IDLE本身是一个Tkinter程序,并且它已经有了一个事件循环,如this answer所述。在
{cdw}这句话毫无意义。在
FWIW,这是你的程序,添加了mainloop调用,还有一些其他的小改动。最好避免“星型”导入,因为它们会将名称空间与导入的名称混淆,例如
from tkinter import *
会带来130多个名称。这可能会导致与您自己定义的名称发生冲突,除非您非常熟悉Tkinter定义的每个名称,但是如果您将星型导入与另一个恰好使用Tkinter使用的名称的模块一起使用,则问题尤其严重。在正如bryanoakley在评论中提到的那样,最好只是更新Canvas文本项的文本字符串,而不是破坏旧的文本项并每秒创建一个新的文本项。所以这里有一个从你的代码派生出来的新版本。在
我使用^{} 来构建时间字符串,因为它比简单地切片
struct_time
返回的struct_time
对象提供更好的输出:它总是为小时、分钟和秒组件使用2位数字,并且您可以很容易地在格式字符串中添加冒号(或其他)。{cd7>提供了链接的所有文档格式。在我还把GUI放到了一个类中。对于这样一个简单的GUI来说,这并不是真正必要的,但是这是一个很好的习惯,因为它使代码更加模块化。在
相关问题 更多 >
编程相关推荐