Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的tkinter标签突然消失了?_Python_Tkinter_Label - Fatal编程技术网

Python 为什么我的tkinter标签突然消失了?

Python 为什么我的tkinter标签突然消失了?,python,tkinter,label,Python,Tkinter,Label,我在试着做一个国际象棋AI。我需要一盘棋才能下棋。我制作了可以拖拽的棋子、棋盘、时钟等。现在,我正试图让时钟在有人演奏时交替。在我的一次让时钟交替的测试中,人工智能的时钟突然消失了。我检查我是否忘记了什么,比如我添加了网格方法,把它放在根目录中,保存了,等等。我都做了。我试着换一排的数字。原来是0。我试了一下1,它又出现了。但是它不在我想要的地方,所以我再次将数字从1改为2,看看它是否仍然有效。但它消失了。我放回了一个,但还是没问题。如果我保存了,我会检查两次。以下是人工智能时钟的代码: fro

我在试着做一个国际象棋AI。我需要一盘棋才能下棋。我制作了可以拖拽的棋子、棋盘、时钟等。现在,我正试图让时钟在有人演奏时交替。在我的一次让时钟交替的测试中,人工智能的时钟突然消失了。我检查我是否忘记了什么,比如我添加了网格方法,把它放在根目录中,保存了,等等。我都做了。我试着换一排的数字。原来是0。我试了一下1,它又出现了。但是它不在我想要的地方,所以我再次将数字从1改为2,看看它是否仍然有效。但它消失了。我放回了一个,但还是没问题。如果我保存了,我会检查两次。以下是人工智能时钟的代码:

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()
最后,这里是根框架:

from tkinter import Tk

class Root:
    root = Tk()
有缩进,因为它是在一个方法中,谢谢

您只需调用self.AI.倒计时一次。在它中,只有当self.t>0且ai_turn==True时,才启动计时器。但是,ai_turn为False,因此计时器永远不会启动。如果在程序开始时将ai_turn设置为True,计时器将工作

要发现这一点,您所要做的就是在if语句之前放置一个print语句,以验证您对这些变量的假设。此外,如果您给标签一个独特的颜色,您将看到它在屏幕上,但非常小,因为默认情况下,它没有文本在它


换句话说,标签看起来很好,只要您有启动计时器的逻辑,标签就会正确更新。

它是我存储root=Tk的地方。它在我的代码中的许多地方都有使用,所以我决定将它放在一个文件中。这是我测试中唯一包含的东西。当我添加go方法时,时钟没有走,所以我认为它没有改变什么。所以我通过做if语句来确定这一点。而self.t是一个错误,我会删除它,我加了它。它只包含root=tk构建MRE是故障排除的一部分。通过将问题缩小到更小的范围,您可能会自己发现它不起作用的原因。如果没有,那么你可以在这里发布MRE。按照代码现在的方式,我们无法运行它,因此无法测试问题。如果你只是不能减少你的代码或者不知道如何在你的问题中发布一个指向粘贴库的链接,请注意,你不确定如何将其减少为MRE。我不能说它不会被否决,但有人可能会帮助你学习如何发布代码。