簡體   English   中英

為什么我的tkinter label突然沒了?

[英]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>0ai_turn == True時才啟動計時器。 但是, ai_turnFalse ,因此計時器永遠不會啟動。 如果您在程序開始時將ai_turn設置為 True,計時器就會工作。

要發現這一點,您所要做的就是在if語句之前放置一個print語句,以驗證您對這些變量的假設。 另外,如果你給 label 一個不同的顏色,你會看到它在屏幕上但非常小,因為默認情況下它沒有文本。

換句話說,label 看起來很好,只要您有啟動計時器的邏輯就可以正確更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM