Python 导入时间时Tkinter窗口未打开

Python 导入时间时Tkinter窗口未打开,python,tkinter,Python,Tkinter,我正在运行我制作的一个简单的时钟程序,在编辑它时我遇到了一个问题。时钟与打印语句一起独立工作,着色窗口也独立工作,但一起不工作。我首先通过导入tkinter库重新创建了它,然后添加了时间导入,我停止了工作。我能做什么?这是我的密码。(我正在运行python v3.6.5)` `GUI程序通常使用事件驱动的执行模型。这意味着您构建GUI,它位于一个循环中,等待事件发生,并对事件做出响应。但是在您的程序中有一个无限的while循环,因此GUI没有机会做任何事情 有更好的方法可以做到这一点,但这里有一

我正在运行我制作的一个简单的时钟程序,在编辑它时我遇到了一个问题。时钟与打印语句一起独立工作,着色窗口也独立工作,但一起不工作。我首先通过导入tkinter库重新创建了它,然后添加了时间导入,我停止了工作。我能做什么?这是我的密码。(我正在运行python v3.6.5)`


`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()

FWIW,你可以在我的答案末尾看到一个简单的Tkinter时钟。你是说
导入时间;从着色剂导入*
起作用,从着色剂导入*
;导入时间不起作用?顺便说一句,从tkinter导入中执行
*
不是一个好主意。有关详细信息,请参阅。
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()