tkinter 井字游戏程序
tkinter tic tac toe program
我正在尝试使用 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 class 中注释相应的代码并且它有效。有人能告诉我为什么会这样吗?我花了几个小时试图解决这个问题。
保持对 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()
我正在尝试使用 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 class 中注释相应的代码并且它有效。有人能告诉我为什么会这样吗?我花了几个小时试图解决这个问题。
保持对 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()