单击后它会获得鼠标的位置,但是我无法返回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)
答案 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()