ich möchte mir ein eigenes Widget schreiben und mit pack positionieren. Das Widget funktioniert so wie ich es mir vorstelle, allerdings würde ich gerne die Position nicht wie von mir programmiert übergeben, sondern ganz normal wie bei jedem anderen Widget mit k1.pack(side="top") durchführen. Kann mir jemand helfen?
Code: Alles auswählen
from tkinter import *
import random
class Kreisdiagramm():
""" Master angeben, Anordnung (left, top, right, bottom), Größe, Vordergrundfarbe, Hintergrundfarbe, Hintergrundfarbe1, Maximalwert, Einheit"""
def __init__(self, master, side="top", size=100, bgcolor="white", fgcolor="green", fg1color="gray86", max=100, unit=""):
self.master = master
self.side = side
self.size = size
self.bgcolor = bgcolor
self.fgcolor = fgcolor
self.fg1color = fg1color
self.max = max
self.unit = unit
self.Diagramm = Canvas(self.master, width=self.size, height=self.size)
self.Diagramm.pack(side=self.side)
self.Diagramm.create_rectangle(0, 0, self.size, self.size, fill=self.bgcolor)
coord1 = self.size/10, self.size/10, self.size-self.size/10, self.size-self.size/10
self.Diagramm.create_oval(coord1, fill=fg1color, width=0)
coord2 = self.size/10, self.size/10, self.size-self.size/10, self.size-self.size/10
stickness = int(self.size/14)
self.Kreisbogen = self.Diagramm.create_arc(coord2, fill=self.fgcolor, outline=self.fgcolor, start=90, extent=0, style=ARC, width=stickness)
self.font1 =("Arial", int(self.size/5))
self.Anzeige = self.Diagramm.create_text(self.size/2, self.size/2, text="", font=self.font1)
self.font2 =("Arial", int(self.size/10))
self.Einheit = self.Diagramm.create_text(self.size/2, self.size-self.size/3+self.size/20, text="", font=self.font2)
def aktualisiereKreisdiagramm(self, value):
value1 = int(360 * value / k1.max)
self.Diagramm.itemconfigure(self.Kreisbogen, extent=value1)
self.Diagramm.itemconfigure(self.Anzeige, text=str(value*-1))
self.Diagramm.itemconfigure(self.Einheit, text=self.unit)
def zufallswinkel():
zufallszahl = random.randint(0, k1.max) * -1
k1.aktualisiereKreisdiagramm(zufallszahl)
if __name__ == "__main__":
root = Tk()
k1 = Kreisdiagramm(root, "top", 400, "white", "BlueViolet", "gray86", 360, "Grad")
Aendern = Button(root, text="Neuer Winkel", command=zufallswinkel)
Aendern.pack(side="top")
root.mainloop()
Viele Grüße und einen schönen Sonntag.
snowflake
PS: Was ich auch nicht ganz verstehe ist, warum bei genau 360° kein Kreisbogen zu sehen ist?