事件后如何返回鼠标位置的值

时间:2019-05-07 05:22:19

标签: python python-3.x tkinter

单击后它会获得鼠标的位置,但是我无法返回X和Y值以用于其他功能。如以下代码所示,它是第一次打印,但第二次打印什么都不做。我认为x0,y0不会返回,它们仍然是局部变量。

from tkinter import *
root = Tk()
w = Canvas(root, width=1000, height=640)
w.pack()
def getorigin(eventorigin):
    global x0, y0
    x0 = eventorigin.x
    y0 = eventorigin.y
    print(x0, y0)
    return x0, y0
w.bind("<Button 1>",getorigin)
print(x0, y0)

1 个答案:

答案 0 :(得分:2)

您不能从分配给事件的函数中返回(或在command=bind()after()中使用)。您只能分配给全局变量,以后再用于其他功能。

print()显示窗口之前执行bind()之后的mainloop()并不是“其他功能”。

我使用两种功能:一种是在按下鼠标左键时获取值,另一种是在按下鼠标右键时使用这些值。第二个函数使用第一个函数的值。它表明第一个函数的值已分配给全局变量。

from tkinter import *

# --- functions ---

def getorigin(event):
    global x0, y0 # inform function to assing to global variables instead of local variables

    x0 = event.x
    y0 = event.y

    print('getorigin:', x0, y0)

def other_function(event):
    #global x0, y0 # this function doesn't assign to variables so it doesn't need `global`
    print('other function', x0, y0)

# --- main ---

# create global variables 
x0 = 0  
y0 = 0

root = Tk()

w = Canvas(root, width=1000, height=640)
w.pack()

w.bind("<Button-1>", getorigin)
w.bind("<Button-3>", other_function)

print('before mainloop:', x0, y0) # executed before mainloop shows window

root.mainloop()