2010-07-20 3 views

ответ

4

Посмотрите на таблицу 7-1 документов. Есть события, которые определяют движение, пока кнопка нажата, <B1-Motion>, <B2-Motion> и т.д.

Если вы не говорите о событии нажми и двигаться, то вы можете начать делать свою деятельность на <Button-1> и прекратить делать это, когда вы получаете <B1-Release>.

+0

Как выглядит код для остановки события? – rectangletangle

+0

Я бы рекомендовал сохранить переменную типа 'mouse_is_down' и установить ее в« True »или« False »в зависимости от того, получаете ли вы событие прессования или выпуска. В вашем коде во время цикла вы можете проверить, соответствует ли переменная 'True', что означает, что мышь не работает, и делайте свое дело для удерживания кнопки. Когда переменная 'False', вы можете пропустить код для удерживания кнопки мыши. –

+2

Видимо, теперь ссылка должна быть: http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm –

1

Используйте мышиные события перемещения/движения и проверьте флаги модификатора. Там появятся кнопки мыши.

5

Если вы хотите «что-то произойти» без каких-либо промежуточных событий (то есть: без перемещения пользователем мыши или нажатия каких-либо других кнопок), ваш единственный выбор - опрос. Установите флаг при нажатии кнопки, отмените его при отпускании. Во время опроса проверьте флаг и запустите свой код, если он установлен.

Вот кое-что, чтобы проиллюстрировать этот момент:

import Tkinter 

class App: 
    def __init__(self, root): 
     self.root = root 
     self.mouse_pressed = False 
     f = Tkinter.Frame(width=100, height=100, background="bisque") 
     f.pack(padx=100, pady=100) 
     f.bind("<ButtonPress-1>", self.OnMouseDown) 
     f.bind("<ButtonRelease-1>", self.OnMouseUp) 

    def do_work(self): 
     x = self.root.winfo_pointerx() 
     y = self.root.winfo_pointery() 
     print "button is being pressed... %s/%s" % (x, y) 

    def OnMouseDown(self, event): 
     self.mouse_pressed = True 
     self.poll() 

    def OnMouseUp(self, event): 
     self.root.after_cancel(self.after_id) 

    def poll(self): 
     if self.mouse_pressed: 
      self.do_work() 
      self.after_id = self.root.after(250, self.poll) 

root=Tkinter.Tk() 
app = App(root) 
root.mainloop() 

Однако, опрос, как правило, нет необходимости в приложении GUI. Вы, вероятно, только заботитесь о том, что происходит, когда мышь нажата и движется. В этом случае вместо функции опроса просто привяжите do_work к событию <B1-Motion>.