Python 如何获取鼠标坐标作为变量?

Python 如何获取鼠标坐标作为变量?,python,oop,tkinter,Python,Oop,Tkinter,但是我不知道如何用其他函数来达到这个变量。如果我想从click_coordinates()函数调用另一个函数,我会得到一个错误,即我想调用的新函数的名称没有定义。似乎我只能打印坐标。如果要访问回调之外的值,必须设置全局或实例变量。由于您使用的是类(尽管使用时不正确1),实例变量是自然选择: 例如: def click_coordinates(event): x = str(event.x) y = str(event.y) mouse = x + ":" + y

但是我不知道如何用其他函数来达到这个变量。如果我想从
click_coordinates()
函数调用另一个函数,我会得到一个错误,即我想调用的新函数的名称没有定义。似乎我只能打印坐标。

如果要访问回调之外的值,必须设置全局或实例变量。由于您使用的是类(尽管使用时不正确1),实例变量是自然选择:

例如:

def click_coordinates(event):
    x = str(event.x)
    y = str(event.y)
    mouse = x + ":" + y
    return mouse
然后,您可以在对象中的任何其他位置引用
self.last_x
self.last_y
。在类的
\uuuu init\uuuu
中,最好将这些初始化为
None

def click_coordinates(self, event):
    self.last_x = event.x
    self.last_y = event.y

1您应该将所有代码移动到
\uuuu init\uuuu
中,而不是直接移动到
类游戏
下。另外,
click\u坐标
需要一个
self
参数,应该作为
self引用。click\u坐标

class Game:
    def __init__(self):
        self.last_x = self.last_y = None
        ...
职业游戏:
定义初始化(自):
root=tk.tk()
...
my_canvas.bind(“,self.click_坐标)
def点击坐标(自身、事件):
...

我只是想建议你最好用按钮代替画布,我相信这会更容易,因为按钮有命令,你最好这样做:

class Game:
    def __init__(self):
        root = tk.Tk()
        ...
        my_canvas.bind("<Button-1>", self.click_coordinates)

    def click_coordinates(self, event):
        ...

然后定义9个函数,如果你想对抗计算机或其他玩家(不太好,因为这很容易),如果你想变得健壮,只需围绕这段代码进行操作即可-。

你是否试图将它们保存为类中的属性?返回它们?把它们还给哪里?不能从回调返回值。或者更准确地说,您可以返回某些内容,但运行回调的代码在大多数情况下会忽略返回的内容。您需要使用回调函数,
单击坐标()
,将信息存储在其他应用程序可以访问的某个位置,例如某种类型的列表或其他类型的容器对象。感谢您的帮助。我把代码移到init下,现在它就可以工作了。这是我第一次上课。
class Game:
    def __init__(self):
        root = tk.Tk()
        ...
        my_canvas.bind("<Button-1>", self.click_coordinates)

    def click_coordinates(self, event):
        ...
`b1=Button(win,font=("Arial Bold", 
50),width=3,bg='white',fg='SteelBlue',command=add1)
lst
b1.grid(row=2,column=1)
b2=Button(win,font=("Arial Bold", 50),width=3,bg='white',fg='SteelBlue',command=add2)
lst
b2.grid(row=2,column=2)
b3=Button(win,font=("Arial Bold", 50),width=3,bg='white',fg='SteelBlue',command=add3)
lst
b3.grid(row=2,column=3)
b4=Button(win,font=("Arial Bold", 50),width=3,bg='white',fg='SteelBlue',command=add4)
lst
b4.grid(row=3,column=1)
b5=Button(win,font=("Arial Bold", 50),width=3,bg='white',fg='SteelBlue',command=add5)
lst
b5.grid(row=3,column=2)
b6=Button(win,font=("Arial Bold", 50),width=3,bg='white',fg='SteelBlue',command=add6)
lst
b6.grid(row=3,column=3)
b7=Button(win,font=("Arial Bold", 50),width=3,bg='white',fg='SteelBlue',command=add7)
lst
b7.grid(row=4,column=1)
b8=Button(win,font=("Arial Bold", 50),width=3,bg='white',fg='SteelBlue',command=add8)
lst
b8.grid(row=4,column=2)
b9=Button(win,font=("Arial Bold", 50),width=3,bg='white',fg='SteelBlue',command=add9)
lst
b9.grid(row=4,column=3)`