'''
Created on Aug 20, 2017

@author: Aditya

This program demonstrates the use of button widget in tkinter
'''

import tkinter as tk
from tkinter import ttk

class ButtonApp:
    def __init__(self, master):
        self.button = ttk.Button(master, text = 'Click me')
        self.button.pack()
        self.button.config(command = self.buttonfunc)          # configure a command for button click
        
        self.btn1 = ttk.Button(master, text = 'Click on \'Click me\'', command = self.invokebutton)
        self.btn1.pack()
        
        self.btn2 = ttk.Button(master, text = 'Disable \'Click me\'', command = self.disableButton)
        self.btn2.pack()
        
        self.btn3 = ttk.Button(master, text = 'Enable \'Click me\'', command = self.enableButton)
        self.btn3.pack()
        
        self.btn4 = ttk.Button(master, text = 'Query state of \'Click me\'', command = self.queryButtonState)
        self.btn4.pack()
        
        self.button.img  = tk.PhotoImage(file = 'simple_gif.gif')
        self.button.img = self.button.img.subsample(10, 10) # take every 5th pixel in x and y direction of image
        
        self.btn5 = ttk.Button(master, text = 'Add image to \'Click me\'', command = self.addImage)
        self.btn5.pack()
        
        self.label = ttk.Label(master, text = 'No button pressed yet.')
        self.label.pack()
        
    def buttonfunc(self):
        self.label.config(text = 'Clicked!!')
    
    def invokebutton(self):
        self.button.invoke()    # invoke the button
        
    def disableButton(self):
        if self.button.instate(['disabled']):
            self.label.config(text='\'Click me\' is already disabled.')
        else:
            self.button.state(['disabled'])      # returns the previous state of button and sets the new state
            self.label.config(text = '\'Click me\' is disabled.')
        
    def queryButtonState(self):
        if self.button.instate(['disabled']):
            self.label.config(text = '\'Click me\' is in diabled state.')
        else:
            self.label.config(text = '\'Click me\' is in enabled state.')
    
    def enableButton(self):
        if self.button.instate(['!disabled']):
            self.label.config(text = '\'Click me\' is already enabled')
        else :
            self.button.state(['!disabled'])
            self.label.config(text = '\'Click me\' is enabled')
    
    def addImage(self):
        self.button.config(image = self.button.img, compound = tk.LEFT)
            
def launchButtonApp():
    root = tk.Tk()  # instantiate the main window class by creating its object
    ButtonApp(root)
    tk.mainloop()

def test():
    launchButtonApp()

if __name__ == '__main__': test()