Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 23, 2019 10:26:42

nick789
Зарегистрирован: 2016-09-21
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка событий мыши

Необходимо при нажатии на кнопку мыши, запоминать координаты курсора.

 def mouse_b1(event):   # при нажатии на кнопку мыши
    global mouse1_x
    global mouse1_y
    mouse1_x, mouse1_y = event.x, event.y
...
root.bind('<Button-1>', mouse_b1)
Но есть мнение что использование глобальных переменных - это зло, с которым надо бороться.

Но как через бинд передать параметры функции mouse_b1 и потом назад получить результат ?
На первую часть вопроса, что то нашлось.
 l.bind('<Button-1>', lambda event, f="Verdana": changeFont(event, f))

А вот как получить результат выполнения функции ??
 l.bind('<Button-1>', lambda event, f="Verdana": i=changeFont(event, f))
Как то так ?
А f=“Verdana” выносится из бинда ??

Может есть более читабельные конструкции ??

Отредактировано nick789 (Янв. 23, 2019 10:30:31)

Офлайн

#2 Янв. 24, 2019 13:12:36

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Обработка событий мыши

nick789
Но есть мнение что использование глобальных переменных - это зло, с которым надо бороться.
ну так используйте тогда классы, например. и ваши mouse1_x, mouse1_y делайте атрибутами класса.

nick789
А вот как получить результат выполнения функции ??…Как то так ?
нет, совсем не так.
Куда вы хотите получить результат? и когда? Тк-интер событийно-ориентированая платформа, функция срабатывает при определенном событии.
можно завести список, в котором хотите хранить координаты мыши, и предавать его в функцию поскольку операции со списками ссылочные, то вы можете получать и устанавливать значения откуда угодно если у вас есть ссылка на список.
както так:
 #
from tkinter import *
mouse_pos=[0, 0]
def mouse_b1(event, mpos):   # при нажатии на кнопку мыши
    print(mpos) # выводит предыдущее!! значение
    print(event.x, event.y) # выводит текущее значение
    mpos[0], mpos[1] = event.x, event.y
root = Tk()
root.bind('<Button-1>', lambda e: mouse_b1(e, mouse_pos))
root.mainloop()
а можно даже не передавать, по той же причине(ссылочные операции с списками) оно будет работать.
 #
from tkinter import *
mouse_pos=[0, 0]
def mouse_b1(event):   # при нажатии на кнопку мыши
    print(mouse_pos) # выводит предыдущее!! значение
    print(event.x, event.y)
    mouse_pos[0], mouse_pos[1] = event.x, event.y
root = Tk()
root.bind('<Button-1>',mouse_b1)
root.mainloop()


но ИМХО это не самый лучший вариант, посмотрите всеже в сторону ООП.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 24, 2019 13:17:55)

Офлайн

#3 Янв. 24, 2019 14:20:54

nick789
Зарегистрирован: 2016-09-21
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка событий мыши

По сути Вы предлагаете глобальную переменную заменить на список. Чуть другой синтаксис все остальные проблемы теже. Так или иначе спасибо за ответ.
С ООП - буду разбираться.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version