【问题标题】:tkinter tic tac toe programtkinter 井字游戏程序
【发布时间】:2015-07-30 08:12:57
【问题描述】:

我正在尝试使用 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 类中的相应代码,它可以工作。有人能告诉我为什么会这样吗?我花了几个小时试图弄清楚这一点。

【问题讨论】:

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


    【解决方案1】:

    保留对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()
    

    【讨论】:

    • 感谢您的回答。终于在你的帮助下解决了这个问题
    猜你喜欢
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2015-06-12
    • 2015-01-08
    相关资源
    最近更新 更多