Как вернуть значение положения мыши после события - PullRequest
2 голосов
/ 07 мая 2019

Он определяет положение мыши после нажатия, но я не могу вернуть значения 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 Ответ

2 голосов
/ 07 мая 2019

Невозможно вернуться из функции, назначенной событию (или используется в 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...