Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter:从空白平铺到标记(X/O)的图像更改不是永久性的_Python_Image_Tkinter_Tic Tac Toe - Fatal编程技术网

Python Tkinter:从空白平铺到标记(X/O)的图像更改不是永久性的

Python Tkinter:从空白平铺到标记(X/O)的图像更改不是永久性的,python,image,tkinter,tic-tac-toe,Python,Image,Tkinter,Tic Tac Toe,我正在用Tkinter制作一个可伸缩的tic-tac-toe程序。当我按下一个空的方形按钮时,图像会发生变化,这是应该的。当我按下一个不同的按钮时,第一次按下的按钮的图像完全消失,而我希望它保持不变,唯一一个带有X/O图像的按钮是最近按下的按钮。有人帮我修这个吗?我是初学者 如果您有任何关于如何使用scalable进行可扩展的win check的提示,我的意思是用户可以输入电路板大小,从2x2到适合屏幕的大小,这将非常有用 这里是我使用的图像,如果它们有用的话,链接可以工作24小时,它们只是一个

我正在用Tkinter制作一个可伸缩的tic-tac-toe程序。当我按下一个空的方形按钮时,图像会发生变化,这是应该的。当我按下一个不同的按钮时,第一次按下的按钮的图像完全消失,而我希望它保持不变,唯一一个带有X/O图像的按钮是最近按下的按钮。有人帮我修这个吗?我是初学者

如果您有任何关于如何使用scalable进行可扩展的win check的提示,我的意思是用户可以输入电路板大小,从2x2到适合屏幕的大小,这将非常有用

这里是我使用的图像,如果它们有用的话,链接可以工作24小时,它们只是一个盒子、X和O的基本125x125图像

问题:第一次按下按钮的图像完全消失

您覆盖了self.\uux=PhotoImage。。。每次单击都会导致上一个映像的垃圾收集,tkinter会释放映像引用

只创建一次图像,并像self.empty_square一样重复使用

简化为以下内容:

    def build_board(self, window):
        self.empty_square = PhotoImage(master=window, file="empty.gif")
        self.x_square = PhotoImage(master=window, file="cross.gif")

        self.squares = []
        for row in range(3):
            for column in range(3):
                self.squares.append(Button(window, image=self.empty_square))
                self.squares[-1].grid(row=row, column=column)
                self.squares[-1].bind("<Button-1>", self.change_mark)

    def change_mark(self, event):
        w = event.widget
        w.configure(image=self.x_square, state=DISABLED)


@NotAVeryProfessionalPikachu:这个索引=self.\uu squares.indexj没有做你认为它做的事情。这就是罪魁祸首:赛尔夫。。。每次单击self都会覆盖。\ux会导致上一个图像的垃圾收集,tkinter会丢失图像引用。@stovfl谢谢,现在可以使用了!我怎么会错过那个。。。非常感谢您的帮助!
    def build_board(self, window):
        self.empty_square = PhotoImage(master=window, file="empty.gif")
        self.x_square = PhotoImage(master=window, file="cross.gif")

        self.squares = []
        for row in range(3):
            for column in range(3):
                self.squares.append(Button(window, image=self.empty_square))
                self.squares[-1].grid(row=row, column=column)
                self.squares[-1].bind("<Button-1>", self.change_mark)

    def change_mark(self, event):
        w = event.widget
        w.configure(image=self.x_square, state=DISABLED)