为什么我的 tkinter 标签突然消失了?
Why does my tkinter label suddenly disappear?
我正在尝试制作国际象棋 AI。我需要一套国际象棋才能下棋。我制作了棋子(它们可以被拖动)、棋盘、时钟等。现在,我正试图让时钟在有人玩的时候交替。在我进行的一项使时钟交替的测试中,人工智能的时钟突然消失了。我检查了我是否忘记了任何事情,比如我是否添加了网格方法,将其放入根目录,保存等等。我做了所有这些。我尝试更改行中的数字。本来是0,我试了1,又出现了。但是它不在我想要的地方,所以我再次将数字从 1 更改为 2,看看它是否仍然有效。但是它消失了。我放回了一个,但它仍然不见了(如果我保存了,我检查了两次)。这是 ai 时钟的代码:
from root_frame import Root
from tkinter import Label
ai_turn = False
class AI:
def __init__(self):
self.the_screen = Root()
self.ai_label = Label(self.the_screen.root, text = "AI", font = "Helvetica 18 bold", width = 40)
self.ai_clock = Label(self.the_screen.root, font = "Helvetica 18 bold")
def set_timer(self):
self.t = 600
return self.t
def countdown(self):
global ai_turn
if self.t > 0 and ai_turn == True:
self.convert()
self.t = self.t - 1
self.ai_clock.after(1000, lambda: self.countdown())
print("it's running dum dum")
elif self.t == 0:
self.ai_clock.config(text = "ai loose")
elif ai_turn == False:
print("it's not running dum dum")
self.t = self.t
def convert(self):
self.seconds = self.t % (24 * 3600)
self.seconds %= 3600
self.minutes = self.t // 60
self.seconds %= 60
self.ai_clock.config(text = "%02d:%02d" % (self.minutes, self.seconds))
def stop(self):
global ai_turn
ai_turn = False
if ai_turn == False:
print("ai stopped, value: {}".format(ai_turn))
def go(self):
global ai_turn
ai_turn = True
if ai_turn == True:
print("ai active, value: {}".format(ai_turn))
这里是我对它们进行网格化的地方:
class Screen:
def __init__(self):
self.AI = AI()
self.Human = Human()
self.AI.ai_clock.grid(row = 0, column = 9)
self.Human.human_clock.grid(row = 7, column = 8)
"Run functions to activate the clocks"
self.AI.set_timer()
self.AI.countdown()
self.Human.set_timer()
self.Human.countdown()
最后,root_frame:
from tkinter import Tk
class Root:
root = Tk()
(有缩进,因为它在方法中)谢谢!
您只调用了一次 self.AI.countdown()
。在其中,只有在 self.t>0
和 ai_turn == True
时才启动计时器。但是,ai_turn
是 False
,因此计时器永远不会启动。如果您在程序开始时将 ai_turn
设置为 True,计时器将会工作。
要发现这一点,您只需在 if
语句之前放置一个 print
语句,以验证您对这些变量的假设。另外,如果你给标签一个不同的颜色,你会看到它在屏幕上但非常小,因为默认情况下它没有文本。
换句话说,标签显示得很好,并且只要您有启动计时器的逻辑就可以正确更新。
我正在尝试制作国际象棋 AI。我需要一套国际象棋才能下棋。我制作了棋子(它们可以被拖动)、棋盘、时钟等。现在,我正试图让时钟在有人玩的时候交替。在我进行的一项使时钟交替的测试中,人工智能的时钟突然消失了。我检查了我是否忘记了任何事情,比如我是否添加了网格方法,将其放入根目录,保存等等。我做了所有这些。我尝试更改行中的数字。本来是0,我试了1,又出现了。但是它不在我想要的地方,所以我再次将数字从 1 更改为 2,看看它是否仍然有效。但是它消失了。我放回了一个,但它仍然不见了(如果我保存了,我检查了两次)。这是 ai 时钟的代码:
from root_frame import Root
from tkinter import Label
ai_turn = False
class AI:
def __init__(self):
self.the_screen = Root()
self.ai_label = Label(self.the_screen.root, text = "AI", font = "Helvetica 18 bold", width = 40)
self.ai_clock = Label(self.the_screen.root, font = "Helvetica 18 bold")
def set_timer(self):
self.t = 600
return self.t
def countdown(self):
global ai_turn
if self.t > 0 and ai_turn == True:
self.convert()
self.t = self.t - 1
self.ai_clock.after(1000, lambda: self.countdown())
print("it's running dum dum")
elif self.t == 0:
self.ai_clock.config(text = "ai loose")
elif ai_turn == False:
print("it's not running dum dum")
self.t = self.t
def convert(self):
self.seconds = self.t % (24 * 3600)
self.seconds %= 3600
self.minutes = self.t // 60
self.seconds %= 60
self.ai_clock.config(text = "%02d:%02d" % (self.minutes, self.seconds))
def stop(self):
global ai_turn
ai_turn = False
if ai_turn == False:
print("ai stopped, value: {}".format(ai_turn))
def go(self):
global ai_turn
ai_turn = True
if ai_turn == True:
print("ai active, value: {}".format(ai_turn))
这里是我对它们进行网格化的地方:
class Screen:
def __init__(self):
self.AI = AI()
self.Human = Human()
self.AI.ai_clock.grid(row = 0, column = 9)
self.Human.human_clock.grid(row = 7, column = 8)
"Run functions to activate the clocks"
self.AI.set_timer()
self.AI.countdown()
self.Human.set_timer()
self.Human.countdown()
最后,root_frame:
from tkinter import Tk
class Root:
root = Tk()
(有缩进,因为它在方法中)谢谢!
您只调用了一次 self.AI.countdown()
。在其中,只有在 self.t>0
和 ai_turn == True
时才启动计时器。但是,ai_turn
是 False
,因此计时器永远不会启动。如果您在程序开始时将 ai_turn
设置为 True,计时器将会工作。
要发现这一点,您只需在 if
语句之前放置一个 print
语句,以验证您对这些变量的假设。另外,如果你给标签一个不同的颜色,你会看到它在屏幕上但非常小,因为默认情况下它没有文本。
换句话说,标签显示得很好,并且只要您有启动计时器的逻辑就可以正确更新。