- Faça o download desse site: Apostila de Python
Eventos com Mouse: <ButtonRelease-1> e <B1-Motion>
Para isso, vamos usar 5 eventos:
- <Button-1> - Botão 1 do mouse (mais a esquerda) é pressionado
- <ButtonRelease-1> - Botão 1 é liberado (released)
- <Enter> - Mouse entrou no frame (janela)
- <Leave> - Mouse deixou o frame da janela
- <B1-Motion> - Botão 1 do mouse foi arrastado (clicar e segurar)
Desses cinco, dois são novos: o <ButtonRelease-1> e o <B1-Motion>, mas bem fáceis de entender com a explicação do programa, a seguir.
Vamos lá, inicialmente criamos nossa classe MouseEvent, que herda a Frame, logo é um frame.
Inicializamos a classe master (Frame.__init__), depois empacotamos o frame, definimos um título e seu tamanho.
Depois, vamos criar o objeto StringVar(), que vai ser um label que dinâmico, que vai ficar variando e mudando de valor (alterando seu texto). Inicialmente, definimos o texto "Mouse fora da janela" para ele.
Depois, criamos nosso Label, com o parâmetro textvariable recebendo o objeto StringVar.
Agora vamos fazer os binds.
O primeiro, <Button-1>, chama o método botaoPressionado, que recebe o evento do clique e mostra sua posição através dos atributos event.x e event.y, no label.
O segundo bind é com o evento <ButtonRelease-1>, que chama o método botaoLiberado que faz o mesmo do método anterior, mas mostra onde você soltou o botão do mouse.
Depois vem o <Enter> e o <Leave>, eventos que já estudamos, que identificam se o mouse entrou ou saiu do widget em questão, no caso, o frame.
Por fim, o bind com o evento <B1-Motion>, que vai identificar até onde o mouse estará sendo arrastado (clicar, segura e se mover).
Veja como ficou nosso código Python:
from tkinter import * class MouseEvent( Frame ): def __init__( self ): # Criando o frame, título e tamanho Frame.__init__( self ) self.pack( expand = YES, fill = BOTH ) self.master.title( "Eventos com Mouse" ) self.master.geometry( "300x200" ) # String com a posição do mouse self.mousePosicao = StringVar() self.mousePosicao.set( "Mouse fora da janela" ) # Criando e posicionando o label embaixo self.positionLabel = Label( self,textvariable = self.mousePosicao ) self.positionLabel.pack( side = BOTTOM ) # Criando os binds com os eventos de mouse self.bind( "<Button-1>", self.botaoPressionado ) self.bind( "<ButtonRelease-1>", self.botaoLiberado ) self.bind( "<Enter>", self.entrouJanela ) self.bind( "<Leave>", self.saiuJanela ) self.bind( "<B1-Motion>", self.mouseArrastado ) mainloop() def botaoPressionado( self, event ): self.mousePosicao.set( "Pressionado em [ " + str( event.x ) + ", " + str( event.y ) + " ]" ) def botaoLiberado( self, event ): self.mousePosicao.set( "Solto em [ " + str( event.x ) + ", " + str( event.y ) + " ]" ) def entrouJanela( self, event ): self.mousePosicao.set( "Mouse na janela ) def saiuJanela( self, event ): self.mousePosicao.set( "Mouse fora da janela" ) def mouseArrastado( self, event ): self.mousePosicao.set( "Arrastado até [ " + str( event.x ) + ", " + str( event.y ) + " ]" ) # Chamando a classe MouseEvent()
Nenhum comentário:
Postar um comentário