Rounded button tkinter python

Martinn Roelofse picture Martinn Roelofse · Mar 3, 2017 · Viewed 52k times · Source

I am trying to get rounded buttons for my script using tkinter.

I found the following code:

from tkinter import *
import tkinter as tk

class CustomButton(tk.Canvas):
    def __init__(self, parent, width, height, color, command=None):
        tk.Canvas.__init__(self, parent, borderwidth=1, 
            relief="raised", highlightthickness=0)
        self.command = command

        padding = 4
        id = self.create_oval((padding,padding,
            width+padding, height+padding), outline=color, fill=color)
        (x0,y0,x1,y1)  = self.bbox("all")
        width = (x1-x0) + padding
        height = (y1-y0) + padding
        self.configure(width=width, height=height)
        self.bind("<ButtonPress-1>", self._on_press)
        self.bind("<ButtonRelease-1>", self._on_release)

    def _on_press(self, event):
        self.configure(relief="sunken")

    def _on_release(self, event):
        self.configure(relief="raised")
        if self.command is not None:
            self.command()
app = CustomButton()
app.mainloop()

but I get the following error:

TypeError: __init__() missing 4 required positional arguments: 'parent', 'width', 'height', and 'color'

Answer

Simon picture Simon · Aug 6, 2017

A very easy way to make a rounded button in tkinter is to use an image.

First create an image of what you want you button to look like save it as a .png and remove the outside background so it is rounded like the one below:

Click here to see image

Next insert the image in a button with PhotoImage like this:

self.loadimage = tk.PhotoImage(file="rounded_button.png")
self.roundedbutton = tk.Button(self, image=self.loadimage)
self.roundedbutton["bg"] = "white"
self.roundedbutton["border"] = "0"
self.roundedbutton.pack(side="top")

Ensure to use border="0" and the button border will be removed.

I added the self.roundedborder["bg"] = "white" so that the the background the background of the button is the same as the Tkinter window.

The great part is that you can use any shape you like not just the normal button shapes.