-3

I want to check periodically whether button is pressed or not. If not , then I want to print something. I need simple example to implement this. Thanks in advance.


from Tkinter import *
import subprocess

def execute_querie1():
    counter = 0
    global a 
    a = 0
    def onRightClick(event):
        print 'Got right mouse button click:', 
        showPosEvent(event)
        print ("Right clickkkk")
        close_window()
        a = 1

        return a

    def close_window (): 
      # root.destroy()
      tkroot.destroy()

    def showPosEvent(event):
        print 'Widget=%s X=%s Y=%s' % (event.widget, event.x, event.y)

    def quit(event):                           
        print("Double Click, so let's stop") 
        import sys; sys.exit()

    def onLeftClick(event):
        a = True

        print 'Got light mouse button click:', 
        showPosEvent(event)
        print ("Left clickkkk" )
        close_window()
        return a

    subprocess.call(["xdotool", "mousemove", "700", "400"]) 
    tkroot = Tk()
    labelfont = ('courier', 20, 'bold')               
    widget = Label(tkroot, text='Hello bind world')
    widget.config(bg='red', font=labelfont)          
    widget.config(height=640, width=480)                
    widget.pack(expand=YES, fill=BOTH)

    g = widget.bind('<Button-3>',  onRightClick)        
    h = widget.bind('<Button-1>',  onLeftClick)        
    print g
    print h
    widget.focus()                                    
    tkroot.title('Click Me')
    tkroot.mainloop()


if __name__ == "__main__":
    execute_querie1()
Alex Lisovoy
  • 5,767
  • 3
  • 27
  • 28
Pink
  • 25
  • 2
  • 7

1 Answers1

2

You can make variables that contain if the buttons are pressed or not, then bind the clicks to functions that alter these variables ad use after to run a function periodically that checks whether the buttons have been clicked.

Something like this:

from Tkinter import *

class App():
    def __init__(self):
        self.root = Tk()
        self.root.geometry('300x300+100+100')

        self.left = False
        self.right = False
        self.root.bind('<Button-1>', self.lefttclick)
        self.root.bind('<Button-3>', self.rightclick)

        self.root.after(10, self.clicked)
        self.root.mainloop()

    def clicked(self):
        if not self.right and not self.left:
            print 'Both not clicked'
        elif not self.left:
            print 'Left not clicked'
        elif not self.right:
            print 'Right not clicked'

        self.right = False
        self.left = False
        self.root.after(1000, self.clicked)

    def rightclick(self, event):
        self.right = True

    def lefttclick(self, event):
        self.left = True

App()

I have made the application into a class, since this lets you pass the left and right variables to the functions with self.

Community
  • 1
  • 1
fhdrsdg
  • 10,297
  • 2
  • 41
  • 62
  • Thanks! I want to check clicks periodically after some time. Where I should make a loop in previous program? – Pink Dec 07 '14 at 13:52
  • What do you mean by 'after some time'? You can start te loop anywhere you want by setting the first `root.after(...)` call. – fhdrsdg Dec 08 '14 at 08:57