单击鼠标更新tkinter标签

时间:2016-06-10 12:15:15

标签: python tkinter

我是Python的初学者,我正在尝试用tkinter编写一个tictactoe游戏。我的名为Cell的班级扩展为Tkinter.LabelCell类包含数据字段emptyLabelxLabeloLabel。到目前为止,这是我的代码Cell

from tkinter import *

class Cell(Label):
    def __init__(self,container):
        super().__init__(container)
        self.emptyImage=PhotoImage(file="C:\\Python34\\image\\empty.gif")
        self.x=PhotoImage(file="C:\\Python34\\image\\x.gif")
        self.o=PhotoImage(file="C:\\Python34\\image\\o.gif")

    def getEmptyLabel(self):
        return self.emptyImage

    def getXLabel(self):
        return self.x

    def getOLabel(self):
        return self.o

我的主要课程如下:

from tkinter import *
from Cell import Cell

class MainGUI:
    def __init__(self):
        window=Tk()
        window.title("Tac Tic Toe")

        self.frame1=Frame(window)
        self.frame1.pack()

        for i in range (3):
            for j in range (3):
                self.cell=Cell(self.frame1)
                self.cell.config(image=self.cell.getEmptyLabel())

                self.cell.grid(row=i,column=j)

        self.cell.bind("<Button-1>",self.flip)

        frame2=Frame(window)
        frame2.pack()
        self.lblStatus=Label(frame2,text="Game Status").pack()

        window.mainloop()

   def flip(self,event):
       self.cell.config(image=self.cell.getXLabel())

MainGUI()

代码在单元格3x3上显示空单元格图像,但是当我单击单元格以将空单元格图像更新为X图像时。它目前只发生在第3行第3列的空标签上。

我的问题是:如何在鼠标点击时更改标签?

1 个答案:

答案 0 :(得分:2)

您继续重新分配self.cell,然后在完成该部分后,将鼠标按钮绑定到最后一个单元格。将鼠标按钮绑定到循环中的每个单元格。

回调函数也是硬编码的,只能查看self.cell,你一直重新分配,最后只有最后一个。除了将鼠标按钮绑定到每个单元格之外,您还必须更改回调函数以查看正确的单元格。

__init__

for i in range (3):
    for j in range (3):
        cell=Cell(self.frame1)
        cell.config(image=self.cell.getEmptyLabel())

        cell.grid(row=i,column=j)

        cell.bind("<Button-1>", lambda event, cell=cell: self.flip(cell))

或者,不使用lambda

for i in range (3):
    for j in range (3):
        cell=Cell(self.frame1)
        cell.config(image=self.cell.getEmptyLabel())

        cell.grid(row=i,column=j)

        def temp(event, cell=cell):
            self.flip(cell)

        cell.bind("<Button-1>", temp)

flip

def flip(self, cell):
    self.cell.config(image=cell.getXLabel())