Új hozzászólás Aktív témák

  • cadtamas

    tag

    Üdv, ismét elakadtam.

    Van egy programom, ami egy elektromos ellenállásra rajzolja ki a megfelelő színkódokat.
    Gerard Swinnen 13.4. feladat
    Az lenne a feladat, hogy miután beütöm az ellenállás értékét, ne gombhoz legyen rendelve a csíkok átszínezése, hanem csak simán az <enter> gomb lenyomásával működjön.
    Beleírtam amit elvileg kell, de a következő hibát írja ki:
    "TypeError: changeColours() takes 1 positional argument but 2 were given"

    Tudna valaki segíteni, hogy mit rontottam el?

    from tkinter import*
    from math import log,log10

    class Application:
    def __init__(self):
    """A főablak constructora"""
    self.root=Tk()
    self.root.title('Színkódok')
    self.drawResistor()
    Label(self.root,text="Írja be az ellenállás értékét ohm-ban: ").grid(row=2)
    from tkinter import*
    from math import log,log10

    class Application:
    def __init__(self):
    """A főablak constructora"""
    self.root=Tk()
    self.root.title('Színkódok')
    self.drawResistor()
    Label(self.root,text="Írja be az ellenállás értékét ohm-ban: ").grid(row=2)
    #Button(self.root, text='Mutat', command=self.changeColours).grid(row=3,sticky=W) #Korábban ezzel működött
    self.entry=Entry(self.root,width=14)
    self.entry.bind("<Return>",self.changeColours) #Ezt írtam csak bele
    self.entry.grid(row=3)
    #színkódok:
    self.cc=['black','brown','red','orange','yellow','green','blue','purple','grey','white']
    self.root.mainloop()

    def drawResistor(self):
    """Vászon ellenállás modellel, amin három színes csík van"""
    self.can=Canvas(self.root,width=500,height=200,bg='light blue')
    self.can.grid(row=1,pady=5,padx=5)
    self.can.create_line(10,100,490,100,width=3)
    self.can.create_rectangle(130,60,360,140,fill='beige',width=2)
    #három színes csík (feketék alapból)
    self.line=[] #listában tároljuk őket
    for x in range(150,250,48):
    self.line.append(self.can.create_rectangle(x,60,x+30,140,fill='black',width=0))

    def changeColours(self):
    """A beírt értéknek megfelelő három szín kiiratása"""
    self.v1ch=self.entry.get() #A get() metódus egy stringet ad vissza (ez a bekért adat)
    try:
    v=float(self.v1ch) #Ha sima float értéket írtunk be akkor ezzel működik
    except:
    err=1 #Nem numerikus adat
    else:
    err=0
    if err==1 or v>1e11:
    self.reportError() #Nem megfelelő érték
    elif v<10:
    li=[0]*3
    li[1]=int(v+.5)
    li[2]=int((v-int(v))*10+.5)
    for n in range (3):
    self.can.itemconfigure(self.line[n],fill=self.cc[li[n]])
    else:
    li=[0]*3
    logv=int(log10(v)) #logaritmus egész része
    ordgr=10**logv #nagyságrend
    li[0]=int(v/ordgr) #egész rész
    decim=v/ordgr-li[0] #tizedes rész
    li[1]=int(decim*10+.5) #+0.5 a korrekt kerekítéshez
    li[2]=logv-1
    #a 3. szakasz színezése:
    for n in range (3):
    self.can.itemconfigure(self.line[n],fill=self.cc[li[n]])

    def reportError(self):
    self.entry.configure(bg='red') #mező hátterének színe
    self.root.after(1000,self.emptyEntry) #1 sec után törölni

    def emptyEntry(self):
    self.entry.configure(bg='white') #fehér háttér vissza
    self.entry.delete(0, len(self.v1ch)) #karakterek törlése

    ####Főprogram###
    f=Application()

Új hozzászólás Aktív témák