web-dev-qa-db-fra.com

Bouton arrondi tkinter python

J'essaie d'obtenir des boutons arrondis pour mon script en utilisant tkinter.

J'ai trouvé le code suivant:

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()

mais j'obtiens l'erreur suivante:

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

Un moyen très facile de créer un bouton arrondi dans tkinter consiste à utiliser une image.

Commencez par créer une image de ce que vous voulez que le bouton ressemble à, sauvegardez-le au format .png et supprimez l’arrière-plan extérieur de manière à ce qu’il soit arrondi comme celui ci-dessous:

Cliquez ici pour voir l'image

Ensuite, insérez l'image dans un bouton avec PhotoImage comme ceci:

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")

Assurez-vous d'utiliser border="0" et la bordure du bouton sera supprimée.

J'ai ajouté le self.roundedborder["bg"] = "white" pour que l'arrière-plan du fond du bouton soit identique à celui de la fenêtre Tkinter.

La grande partie est que vous pouvez utiliser n'importe quelle forme que vous aimez, pas seulement la forme normale des boutons.

J'espère que ça a aidé

4
Simon

Vous devez d'abord créer la fenêtre racine (ou un autre widget) et la donner à votre CustomButton avec différents paramètres (voir la définition de la méthode __init__).

Essayez au lieu de app = CustomButton() ce qui suit:

app = tk.Tk()
button = CustomButton(app, 100, 25, 'red')
button.pack()
app.mainloop()
3
avysk

Vous ne transmettez aucun argument au constructeur.

Justement, dans cette ligne

app = CustomButton()

vous devez transmettre les arguments définis dans la définition du constructeur, à savoir parent, width, height et color.

1
frederick99