Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
5 / 0 / 0
Регистрация: 13.03.2020
Сообщений: 101

Обработка нажатия на мышь

04.06.2021, 17:02. Показов 5897. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, возникла одна проблема, как при первом нажатии ЛКМ координаты записывались в переменные x,y, а при втором нажатии ЛКМ координаты записывались в переменные x1,y1, при этом, на третий раз при нажатии ЛКМ координаты записывались, опять, в переменные x,y, при четвёртом нажатии ЛКМ координаты записывались в переменные x1,y1 снова, и так постоянно.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.06.2021, 17:02
Ответы с готовыми решениями:

PyQt5. Обработка нажатия на элемент
Здравствуйте. Не срабатывает метод connect на чекбоксе. Что я делаю не так ? Спасибо! import sys from PyQt5 import QtWidgets ...

Обработка событий нажатия кнопок
Здравствуйте. Изучаю обработку событий. Получается, что при наведении на прямоугольник и нажатии на левую кнопку мыши в консоль идет...

Консоль ловит событие MOUSE_MOVED после нажатия на кнопку мыши, в то время как мышь не движется
Разбираюсь с консолью по примерам с microsoft docs. Код я взял отсюда. Консоль ловит события от клавиатуры, изменения размеров буфера...

12
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
07.06.2021, 08:21
redded123, используй флаг: создал переменную, записали в x, y - флаг равен True, записали в x1, y1 - флаг равен False.
1
5 / 0 / 0
Регистрация: 13.03.2020
Сообщений: 101
07.06.2021, 11:24  [ТС]
Сделал проще, ЛКМ ставлю одну точку, а ПКМ ставлю вторую точку, однако, возника одна "маленькая" проблема. Почему-то name 'x1' is not defined, видимо это моя извечная проблема
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from tkinter import *
root = Tk()
root.geometry('600x600')
 
canvas = Canvas(bg='white')
canvas.pack(fill=BOTH,expand=1)
 
def store_position(event):
    global lastX, lastY
    lastX, lastY = 0, 0
    lastX = event.x
    lastY = event.y
 
def rectangle():
    global x1,y1,x2,y2
    def click(event):
        global x1,y1,x2,y2  
        x1 = event.x     
        y1 = event.y             
        print('x1: ',x1,'y1: ',y1)
    
    def click2(event):
        global x1,y1,x2,y2    
        x2 = event.x     
        y2 = event.y           
        print('x2: ',x2,'y2: ',y2)
            
            
    def functions():        
        global x1,y1,x2,y2 
        canvas.bind('<Button-1>',click)         
        canvas.bind('<Button-3>',click2)                         
    functions()
        
 
    def on_drag2(event):
        canvas.create_rectangle(x1,y1, x2, y2, fill=None, width=2)
        store_position(event)
        
    canvas.bind('<Button-1>', on_drag2)
    canvas.bind('<B1-Motion>', on_drag2)
rectangle()    
root.mainloop()
0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
07.06.2021, 12:13
redded123, зачем вам столько переменных и всюду global (не помню почему, но это вроде как не хорошо)...

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from tkinter import *
 
 
def b1(event):
    root.title("Левая кнопка мыши")
 
 
def b3(event):
    root.title("Правая кнопка мыши")
 
 
def move(event):
    x = event.x
    y = event.y
    s = "Движение мышью {}x{}".format(x, y)
    root.title(s)
 
 
root = Tk()
root.minsize(width=500, height=400)
 
root.bind('<Button-1>', b1)
root.bind('<Button-3>', b3)
root.bind('<Motion>', move)
 
root.mainloop()
Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от redded123 Посмотреть сообщение
Почему-то name 'x1' is not defined
Я пытался понять почему но запутался в коде...

0
5 / 0 / 0
Регистрация: 13.03.2020
Сообщений: 101
07.06.2021, 15:57  [ТС]
Михалыч, я знаю, что глобальные переменные это не очень хорошо, но я хотел, чтобы хоть как-то работало, а потом я, естественно, убиру все ненужные
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
07.06.2021, 16:17
Цитата Сообщение от Михалыч Посмотреть сообщение
Я пытался понять почему но запутался в коде...
Все просто, говорим функции что "x1" это глобальная переменная, а в глобальном пространстве ее нет.

redded123, добавь:
Python
1
2
lastX, lastY = 0, 0
x1, y1, x2, y2 = 0, 0, 0, 0
P.S. не одобряю код в целом.
1
5 / 0 / 0
Регистрация: 13.03.2020
Сообщений: 101
07.06.2021, 16:38  [ТС]
Ничего не работает, даже с флагами

Добавлено через 3 минуты
Fudthhh, дело в том, что питон не может причепить две функции на одну и туже кнопку мыши, поэтому ничего не работает, однако, я сделал рабочий код, но в нём задействованы все три кнопки мышки, а это не удобно как-то
0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
07.06.2021, 16:44
Цитата Сообщение от redded123 Посмотреть сообщение
питон не может причепить две функции на одну и туже кнопку мыши
Ну так-то да, в таком случае я делаю check и отслеживаю его состояние:
Клик мыши ->функция->в функции условие: если check == False то 1, else: что-то другое.
1
5 / 0 / 0
Регистрация: 13.03.2020
Сообщений: 101
07.06.2021, 17:06  [ТС]
А как сделать, чтобы в флаги flag,flag1 были видны в if, если получится, то, так понимаю, проблема решится
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from tkinter import *
 
root = Tk()
root.geometry('600x600')
 
canvas = Canvas(bg='white')
canvas.pack(fill=BOTH,expand=1)
def rectangle():    
    global x1,x2,y1,y2,flag,flag2
    flag = False       
    flag2 = False 
    def on_drag2(event):
        canvas.create_rectangle(x1,y1, x2, y2, fill=None, width=2)
    def func(event):
        global x1,x2,y1,y2,flag,flag2
        if flag==True:   
            x2 = event.x     
            y2 = event.y 
            flag2 = True
            print('x2: ',x2,'y2: ',y2)
            print(flag2)
            print('------------------------------------------')
        if flag == False:
            x1 = event.x     
            y1 = event.y 
            flag = True
            print('x1: ',x1,'y1: ',y1)
            print(flag)
            print('------------------------------------------')
            
    canvas.bind('<Button-1>',func)         
    def func2():
        global flag,flag2
        if flag == True and flag2 == True:
            on_drag2    
            flag = False
            flag2 = False 
        return flag,flag2  
    func2()       
rectangle()
root.mainloop()
0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
07.06.2021, 17:19
redded123,

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from tkinter import *
 
 
def b1(event):
    x = event.x
    y = event.y
    #Вот тут делаем ветвление
    if var.get() == 1:
        s = "Клик мышью {}x{}".format(x, y)
    else:
        s = "Клик тоже мышью, но результат другой"
    root.title(s)
 
 
 
 
 
root = Tk()
 
 
var = IntVar()
chk = Checkbutton(text="Выбор есть, его не может не быть", variable=var)
chk.pack(anchor=W, padx=10)
 
root.minsize(width=500, height=400)
 
root.bind('<Button-1>', b1)
root.mainloop()
Добавлено через 2 минуты
Цитата Сообщение от redded123 Посмотреть сообщение
чтобы в флаги flag,flag1 были видны в if
Я не сильно люблю Tk Вряд ли смогу его поправить, постарался кинуть минимальный пример (я так понял что вам нужно примерно это).

Добавлено через 1 минуту
Цитата Сообщение от redded123 Посмотреть сообщение
global x1,x2,y1,y2,flag,flag2
Я упорно не могу понять зачем вам столько переменных?

Добавлено через 53 секунды

Не по теме:

Будет проект строк 1000 кода и вы в них потеряетесь...

У вас же по сути одно действие клик мыши и получение координат клика, ну еще одна переменная на chek итого три.
1
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
08.06.2021, 06:29
Цитата Сообщение от Михалыч Посмотреть сообщение
global (не помню почему, но это вроде как не хорошо)
Вспомнил где видел и почему это плохо https://www.cyberforum.ru/blog... g7150.html
1
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
08.06.2021, 07:47
Лучший ответ Сообщение было отмечено redded123 как решение

Решение

Думал сами дойдете, но видимо нет:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import tkinter as tk
 
 
def press_button(event):
    frame.coords(rectangle, event.x, event.y, event.x, event.y)
 
 
def motion_button(event):
    x0, y0, _, _ = frame.coords(rectangle)
    frame.coords(rectangle, x0, y0, event.x, event.y)
 
 
def release_button(event):
    x0, y0, _, _ = frame.coords(rectangle)
    frame.coords(rectangle, x0, y0, event.x, event.y)
 
 
root = tk.Tk()
frame = tk.Canvas(root)
rectangle = frame.create_rectangle(0, 0, 0, 0)
 
 
frame.bind("<ButtonPress-1>", press_button)
frame.bind("<B1-Motion>", motion_button)
frame.bind("<ButtonRelease-1>", release_button)
frame.pack()
root.mainloop()
2
5 / 0 / 0
Регистрация: 13.03.2020
Сообщений: 101
08.06.2021, 11:37  [ТС]
Fudthhh, ОГО! Вот это то что надо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.06.2021, 11:37
Помогаю со студенческими работами здесь

Обработка нажатия
Есть игра (для сенсорных устройств), управление в которой осуществляется нажатием в определенную часть экрана. Есть кнопка...

Обработка нажатия клавиш
Здравствуйте! Помогите с написанием программы на Delphi об обработке нажатых клавиш. Суть в чем: у нас есть Radigroup, с двумя Radio:...

Обработка нажатия на гиперссылку
Доброго времени суток, форумчане, подскажите пожалуйста, как сделать обработчик нажатия на гиперссылку в WPF. На данный момент у меня...

Обработка длительного нажатия
В игре нужно перемещать предмет тогда, когда палец на экране: пальцем касаюсь экрана (не важно, в какой области и сколько времени) и...

Обработка нажатия кнопок.
Здравствуйте! Подскажите где, как подправить чтобы правильно все заработало? Нажимаем на BUT1 загорается на установленное время и гаснет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru