我正在运行一个简单的时钟程序,我编辑它时遇到了问题。时钟独立工作,带有打印声明,而tinter窗口也独立工作,但它一起工作并不起作用。我首先导入tkinter库重新创建它,然后添加时间导入,然后我停止工作。我能做什么?这是我的代码。 (我正在运行python v3.6.5)`
import time
from tkinter import*
hours = int(input("what hour is it?"))
minutes = int(input("what minute is it?"))
seconds = int(input("what second is it?"))
window = Tk()
texthours = Text(window, width=1, height=1)
textminutes = Text(window, width=1, height=1)
textseconds = Text(window, width=1, height=1)
textseconds.pack()
textminutes.pack()
texthours.pack()
while 1==2-1:
time.sleep(1)
texthours.delete(0.0, END)
textminutes.delete(0.0, END)
textseconds.delete(0.0, END)
texthours.insert(END, hours)
textminutes.insert(END, minutes)
textseconds.insert(END, seconds)
seconds = seconds + 1
if seconds == 60:
minutes = minutes + 1
seconds = 0
if minutes == 60:
hours = hours + 1
minutes = 0
if hours == 24:
hours = 0
`
答案 0 :(得分:1)
GUI程序通常使用事件驱动的执行模型。这意味着你构建了GUI,它位于一个循环中,等待事件发生,它会响应。但是在你的程序中有一个无限while
循环,因此GUI没有机会做任何事情。
有更好的方法可以做到这一点,但这是一个修改过的代码版本,只需要很少的更改。
在GUI程序中使用time.sleep
不是一个好主意,因为这样可以让所有内容都处于休眠状态,因此GUI无法响应事件。在Tkinter中,您可以使用.after
方法定期调用函数。
import tkinter as tk
hours = int(input("what hour is it? "))
minutes = int(input("what minute is it? "))
seconds = int(input("what second is it? "))
window = tk.Tk()
texthours = tk.Text(window, width=2, height=1)
textminutes = tk.Text(window, width=2, height=1)
textseconds = tk.Text(window, width=2, height=1)
texthours.pack(side=tk.LEFT)
textminutes.pack(side=tk.LEFT)
textseconds.pack(side=tk.LEFT)
def show_time():
global hours, minutes, seconds
texthours.delete(0.0, tk.END)
textminutes.delete(0.0, tk.END)
textseconds.delete(0.0, tk.END)
texthours.insert(tk.END, hours)
textminutes.insert(tk.END, minutes)
textseconds.insert(tk.END, seconds)
seconds = seconds + 1
if seconds == 60:
minutes = minutes + 1
seconds = 0
if minutes == 60:
hours = hours + 1
minutes = 0
if hours == 24:
hours = 0
window.after(1000, show_time)
window.after(1000, show_time)
window.mainloop()
这是一个稍好的版本,它将所有内容整合到一个课程中,因此我们不需要使用global
。这涉及更多的打字,但它使事情更易于管理,尤其是在大型复杂的GUI中。
import tkinter as tk
class Clock:
def __init__(self):
self.hours = int(input("what hour is it? "))
self.minutes = int(input("what minute is it? "))
self.seconds = int(input("what second is it? "))
self.window = tk.Tk()
self.texthours = tk.Text(self.window, width=2, height=1)
self.textminutes = tk.Text(self.window, width=2, height=1)
self.textseconds = tk.Text(self.window, width=2, height=1)
self.texthours.pack(side=tk.LEFT)
self.textminutes.pack(side=tk.LEFT)
self.textseconds.pack(side=tk.LEFT)
self.window.after(1000, self.show_time)
self.window.mainloop()
def show_time(self):
self.texthours.delete(0.0, tk.END)
self.textminutes.delete(0.0, tk.END)
self.textseconds.delete(0.0, tk.END)
self.texthours.insert(tk.END, self.hours)
self.textminutes.insert(tk.END, self.minutes)
self.textseconds.insert(tk.END, self.seconds)
self.seconds += 1
if self.seconds == 60:
self.minutes += 1
self.seconds = 0
if self.minutes == 60:
self.hours += 1
self.minutes = 0
if self.hours == 24:
self.hours = 0
self.window.after(1000, self.show_time)
Clock()