954,549 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Tkinter custom button

I started into a project in Python,Tkinter. I have a button that I have two images for. I know buttons include the "-relief" option so I can get rid of the border. Now I'm trying to get rid of the click animation border, and have the image on the button change when clicked.

Thanks in advanced.

Thropian
Junior Poster in Training
96 posts since Oct 2010
Reputation Points: 13
Solved Threads: 2
 

So I was struck by inspiration moments ago. I decided to replace buttons with canvases bound with a event to imitate a button.

def NewGame(event):
    NewButton.place_forget()
    LoadButton.place_forget()
    CreditsButton.place_forget()
    New()

def ClickNew(event):
    for x in NewButton.find_all():
        NewButton.delete(x)
        ImageNew = ImageTk.PhotoImage(Image.open("New Click.PNG"))
    NewButton.create_image(0,0,anchor=NW,image=ImageNew)
    NewButton.image = ImageNew


ImageNew = ImageTk.PhotoImage(Image.open("New.PNG"))
NewButton = Canvas(canvas, width = 144, height = 50)
NewButton.place(x=50,y=175)
NewButton.create_image(0,0,anchor=NW,image=ImageNew)
NewButton.image = ImageNew
NewButton.bind("<Button-1>",ClickNew)
NewButton.bind("<ButtonRelease-1>",NewGame)


Which works to allow an image change on click. If there is a way for this to be done with a button, I would still be interested. If not, then this code can still help others.

Thropian
Junior Poster in Training
96 posts since Oct 2010
Reputation Points: 13
Solved Threads: 2
 

Just one idea how you do this ...

# toggle a Tkinter button up/down 
# using images and no button border
# tested with Python 2.7 and Python 3.2 by vegaseat

try:
    # Python2
    import Tkinter as tk
except ImportError:
    # Python3
    import tkinter as tk

def action(toggle=[True]):
    """
    toggle the button with up/down images,
    using a list element as static variable
    """
    if toggle[0]:
        button.config(image=image_down)
        toggle[0] = False
    else:
        button.config(image=image_up)
        toggle[0] = True
    

root = tk.Tk()
root.title("up/down button no border")

# pick GIF images you have in the working directory
# or give full path
image_up = tk.PhotoImage(file='up.gif')
image_down = tk.PhotoImage(file='down.gif')

# create a button to display the image
# use bd or borderwidth zero for no border
# start with button image up
button = tk.Button(root, image=image_up, bd=0, command=action)
# position the widgets
button.grid(row=1, column=1, padx=130)

root.mainloop()
Attachments down.gif 3.25KB up.gif 3.24KB
vegaseat
DaniWeb's Hypocrite
Moderator
5,989 posts since Oct 2004
Reputation Points: 1,345
Solved Threads: 1,417
 

ooh, this looks fun. Now how would it be in wx...?

floatingshed
Junior Poster in Training
66 posts since Feb 2012
Reputation Points: 23
Solved Threads: 1
 

This question has already been solved

Post: Markdown Syntax: Formatting Help
You
View similar articles that have also been tagged: