tkinter tic tac toe program

时间:2015-07-30 08:12:57

标签: python python-3.x tkinter tic-tac-toe

我正在尝试使用tkinter并想到实现一个简单的井字游戏。这就是我想出来的

import tkinter as tk

class Gui(tk.Frame):
    def __init__(self, master):
        super().__init__(master)
        self.parent = master
        self.parent.title("tic tac toe")
        logo = tk.PhotoImage(file="X.png")
        for i in range(3):
            for j in range(3):
                w = tk.Label(self,image=logo)
                w.grid(row=i, column=j)

        self.pack()

if __name__ == '__main__':
    root = tk.Tk()
    logo = tk.PhotoImage(file="X.png")
    f = Gui(root)
    root.mainloop()

当我执行时,没有显示任何内容。我在当前文件夹中有图像。只是为了验证我是否做得对,我改变了我的主要部分:

if __name__ == '__main__':
    root = tk.Tk()
    logo = tk.PhotoImage(file="X.png")
    f = Gui(root)
    for i in range(3):
        for j in range(3):
            w = tk.Label(f,image=logo)
            w.grid(row=i, column=j)
    f.pack()
    root.mainloop()

通过评论Gui类中的相应代码并且它可以工作。谁能告诉我为什么会这样?我花了好几个小时试图解决这个问题。

1 个答案:

答案 0 :(得分:0)

继续引用PhotoImage未收集的垃圾。只需将对象保存为实例变量即可解决问题:

def __init__(self, master):
    super().__init__(master)
    self.parent = master
    self.parent.title("tic tac toe")
    self.logo = tk.PhotoImage(file="X.png")  # <----
    for i in range(3):
        for j in range(3):
            w = tk.Label(self, image=self.logo)  # <---
            w.grid(row=i, column=j)

    self.pack()