2017-07-27 187 views
0

我正在做一個tic tac腳趾項目,用於介紹python類,我想製作一個9個按鈕的網格,因此當您點擊它們時,出現x或一個圓圈。我的代碼在沒有圖像的情況下可以正常工作,但不會影響圖像。Python tkinter不顯示gif圖像並顯示爲PhotoImage.1

Layout for tic tac toe

What happens after I click on one of the buttons

這是代碼(對不起,我從來沒有張貼在堆棧,所以我不知道如何格式化) 這是新的一個

def sink(self, i): 

    if self.turn: 
     me = PhotoImage(file="x.gif") 
     self.turn = False 
     self.bState[i] = -1 
     self.bList[i].config(relief=SUNKEN, text=me, state='disabled') 
    else: 
     me = PhotoImage(file="o.gif") 
     self.turn = True 
     self.bState[i] = 1 
     self.bList[i].config(relief=SUNKEN, text=me, state='disabled') 
+0

哦,哎呀我使用了錯誤的代碼。我之前正在玩代碼。我將text = widget更改爲image =,現在當我點擊按鈕時,它會變成一個非常小的盒子 –

+0

如果舊代碼不相關,請將其從問題中刪除。 –

回答

0

好,您將圖像傳遞給按鈕的text=選項。這個選項,正如你可能從名字中猜出的那樣,只是指定了按鈕的文本。改爲使用image=選項。

該代碼仍然不能正常工作,因爲您正在存儲對只加載到局部變量中的圖像的引用 - 只要函數返回,圖像就會消失。 (Tkinter小部件和它顯示的任何圖像之間的連接完全在Python的worldview之外,因此不足以保持圖像不被垃圾收集。)您需要維護每個圖像的引用,只要小部件會 - 通常是小部件的屬性或全局變量。由於您只有兩張圖片需要處理,因此每次移動時,全局變量比從磁盤重新加載圖像更有意義。

+0

哦,謝謝!我只是回頭看看我的代碼,意識到我不小心將image = widget更改爲text = widget。但即使這是我的按鈕之一,即使有參考依然不會變成圖像的問題之一 –