Форум сайта python.su
igor.kaistИзвиняюсь, я сначала пытался на pyqt, но в ней не получилось. И я попробовал на wx, так как тут нашел подходящую мне часть кода.
Вы говорили про Tkinter а показываете код с использованием библиотеки wx
Отредактировано (Фев. 23, 2010 13:54:21)
Офлайн
Вам нужно добавить обработчики событий EVT_LEFT_DOWN и EVT_LEFT_UP
Посмотрите пример DragImage из демонстрашки wxPython
Офлайн
без привязки к 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)
Офлайн
можешь использовать pygame.event там обработка событий на элементарно простом уровне :)
Офлайн
Спасибо 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)
# -*- 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_())
Отредактировано (Фев. 25, 2010 13:03:25)
Офлайн
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()
Офлайн
подскажите, пожалуйста, как в Ткинтере пишется событие, когда клик левой кнопкой мыши сделал и не бросаешь?
нашёл)
<B1-Motion>
Отредактировано nickmetal (Июль 23, 2013 15:09:43)
Офлайн
nickmetal
Неверно. Motion работает в том случае, если мышку еще и тягаешь по экрану (т.е. перемещаешь). Если просто зажал и не отпускаешь, событие не возникнет. Если это событие - нажатие виджета-кнопки, то можно так
but = Tkinter.Button(root, text="dssa", repeatdelay=100, repeatinterval=500, command=call)
Отредактировано 4kpt (Июль 23, 2013 23:08:15)
Офлайн