Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Как определить нажатие кнопок мышки. [RSS Feed]

#1 Фев. 23, 2010 12:52:29

GizGizmo
От:
Зарегистрирован: 2010-02-17
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Как определить нажатие кнопок мышки.

igor.kaist
Вы говорили про Tkinter а показываете код с использованием библиотеки wx
Извиняюсь, я сначала пытался на pyqt, но в ней не получилось. И я попробовал на wx, так как тут нашел подходящую мне часть кода.
Tkinter я тоже рассматривал но на нем тоже не получилось(

Всех с праздником!!!



Отредактировано (Фев. 23, 2010 13:54:21)

Офлайн

#2 Фев. 23, 2010 13:56:05

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Как определить нажатие кнопок мышки.

Вам нужно добавить обработчики событий EVT_LEFT_DOWN и EVT_LEFT_UP
Посмотрите пример DragImage из демонстрашки wxPython



Офлайн

#3 Фев. 23, 2010 14:24:10

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Как определить нажатие кнопок мышки.

без привязки к GUI библиотекам, через win api:

import win32api
import win32con
import time
while 1:
if win32api.GetKeyState(win32con.VK_LBUTTON)<0:
print win32api.GetCursorPos()
time.sleep(0.1)



Офлайн

#4 Фев. 24, 2010 21:30:24

gabin
От:
Зарегистрирован: 2009-03-07
Сообщения: 72
Репутация: +  0  -
Профиль   Отправить e-mail  

Как определить нажатие кнопок мышки.

можешь использовать pygame.event там обработка событий на элементарно простом уровне :)



Офлайн

#5 Фев. 25, 2010 13:01:16

GizGizmo
От:
Зарегистрирован: 2010-02-17
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Как определить нажатие кнопок мышки.

Спасибо igor.kaist этот код работает правильно в консоле, а вот в gui у меня почему то не заработал(

В консоле:

# -*- coding: cp1251 -*-
import win32api
import win32con
import time
t=0
i=1
while i!=0:
print(win32api.GetKeyState(win32con.VK_LBUTTON))
if win32api.GetKeyState(win32con.VK_LBUTTON)<0:

print win32api.GetCursorPos()
t=1
else:
if t==1: #Если отпускается кнопка то выходим
i=0
time.sleep(0.001)
Gui:
# -*- coding: utf-8 -*-
import sys
import win32api
import win32con
import time
from PyQt4 import QtCore, QtGui

class AgeSelector(QtGui.QWidget):
def __init__(self,*args):
QtGui.QWidget.__init__(self,*args)

self.setGeometry(200, 200, 500, 500)
self.setWindowTitle('Cursor')
start = QtGui.QPushButton('Start', self)
start.setGeometry(10, 10, 60, 35)
self.connect(start, QtCore.SIGNAL('clicked()'), self.log_to_console)

def log_to_console(self):
t=0
i=1
while i!=0:
print(win32api.GetKeyState(win32con.VK_LBUTTON))
if win32api.GetKeyState(win32con.VK_LBUTTON)<0:
print ('if')
print (in32api.GetCursorPos())
t=1
else:
print('else')
if t==1: #Если отпускается кнопка то выходим
i=0
time.sleep(0.001)

if __name__=="__main__":
app = QtGui.QApplication(sys.argv)
age_sel = AgeSelector()
age_sel.show()
sys.exit(app.exec_())
В gui win32api.GetKeyState(win32con.VK_LBUTTON) почему то не принимает отрицательные значения и всегда уходит по ветке else.
В чем ошибка, и как это можно исправить?



Отредактировано (Фев. 25, 2010 13:03:25)

Офлайн

#6 Дек. 14, 2010 08:42:42

rustamych
От:
Зарегистрирован: 2010-06-18
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Как определить нажатие кнопок мышки.

GizGizmo
В программе требуется определить нажата ли в данный момент левая кнопка мыши, и если да то начать сохранять координаты курсора, до момента отпускания. Как это можно реализовать, в win32api не могу не чего найти(
Мне тоже нужно было отлавливать положение мыши при движении и нажатой клавишей мыши. Внизу простой код, может кому и понадобится:

import wx

class MyFrame(wx.Frame):
"""create a color frame, inherits from wx.Frame"""
def __init__(self, parent):
# -1 is the default ID
wx.Frame.__init__(self, parent, -1, "Click for mouse position", size=(400,300),
style=wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)
self.SetBackgroundColour('Goldenrod')
self.SetCursor(wx.StockCursor(wx.CURSOR_PENCIL))

# hook some mouse events
self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
self.Bind(wx.EVT_MOTION, self.OnMotion)
self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)

def OnMotion(self, event):
"""mouse is moving"""
ptom = event.GetPosition() # position tuple
if event.LeftIsDown() or event.RightIsDown():
print ptom
self.SetTitle('LeftMouse = ' + str(ptom))

def OnLeftDown(self, event):
"""left mouse button is pressed"""
ptold = event.GetPosition() # position tuple
print ptold
#self.SetTitle('LeftMouse = ' + str(ptold))

def OnRightDown(self, event):
"""right mouse button is pressed"""
ptord = event.GetPosition()
print ptord
#self.SetTitle('RightMouse = ' + str(ptord))

app = wx.PySimpleApp()
frame = MyFrame(None)
frame.Show(True)
app.MainLoop()



Офлайн

#7 Июль 23, 2013 15:07:18

nickmetal
Зарегистрирован: 2012-11-15
Сообщения: 49
Репутация: +  0  -
Профиль   Отправить e-mail  

Как определить нажатие кнопок мышки.

подскажите, пожалуйста, как в Ткинтере пишется событие, когда клик левой кнопкой мыши сделал и не бросаешь?

нашёл)
<B1-Motion>

Отредактировано nickmetal (Июль 23, 2013 15:09:43)

Офлайн

#8 Июль 23, 2013 23:06:37

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Как определить нажатие кнопок мышки.

nickmetal
Неверно. Motion работает в том случае, если мышку еще и тягаешь по экрану (т.е. перемещаешь). Если просто зажал и не отпускаешь, событие не возникнет. Если это событие - нажатие виджета-кнопки, то можно так

but = Tkinter.Button(root, text="dssa", repeatdelay=100, repeatinterval=500, command=call)
Если нужно с .bind() или это не кнопка, то придется добавить конструкцию с .after и с контроллером нажатия-отжатия мышки, т.е. ButtonPress запускает, а ButtonRelease - останавливает процесс повтора.

Если нужны еще пояснения - пишите…

P.S. В идеале нужно писать класс - обертку, которая бы запускала .after() с определенным промежутком времени для обертываемой функции.



Отредактировано 4kpt (Июль 23, 2013 23:08:15)

Офлайн

  • Начало
  • » GUI
  • » Как определить нажатие кнопок мышки.[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version