python error στο compile

ditsikts | Πέμ, 04/29/2010 - 14:12 | 3' | 2

Μαθαίνω python και για GUI χρησιμοποιώ το Tkinter.

Προσπαθώ να φτιάξω ένα πολύ απλό calculator που θα κάνει πράξεις μόνο με μονοψήφιους αριθμούς.

όποτε πατάω κάποιο νούμερο μου βγάζει το error:

 

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1413, in __call__
    return self.func(*args)
TypeError: bena() takes exactly 1 argument (0 given)
 
Πως διορθώνετε;
 
Το πρόγραμμα είναι αυτό:
 
from Tkinter import *
import sys
root=Tk()
flag=0
def bmhden(self):
    if (flag==0):
        b=0
        flag=flag+1
    elif (flag==2):
        a=0
        flag=flag+1
def bena(self):
    if (flag==0):
        b=1
        flag=flag+1
    elif (flag==2):
        a=1
        flag=flag+1
def bduo(self):
    if (flag==0):
        b=2
        flag=flag+1
    elif (flag==2):
        a=2
        flag=flag+1
def btria(self):
    if (flag==0):
        b=3
        flag=flag+1
    elif (flag==2):
        a=3
        flag=flag+1
def btesse(self):
    if (flag==0):
        b=4
        flag=flag+1
    elif (flag==2):
        a=4
        flag=flag+1
def bpent(self):
    if (flag==0):
        b=5
        flag=flag+1
    elif (flag==2):
        a=5
        flag=flag+1
def beksi(self):
    if (flag==0):
        b=6
        flag=flag+1
    elif (flag==2):
        a=6
        flag=flag+1
def befta(self):
    if (flag==0):
        b=7
        flag=flag+1
    elif (flag==2):
        a=7
        flag=flag+1
def boxto(self):
    if (flag==0):
        b=8
        flag=flag+1
    elif (flag==2):
        a=8
        flag=flag+1
def benia(self):
    if (flag==0):
        b=9
        flag=flag+1
    elif (flag==2):
        a=9
        flag=flag+1
def prosthesi(self):
    if (flag==1):
        prksi="pros"
        flag=flag+1
def aferesi(self):
    if (flag==1):
        prksi="afe"
        flag=flag+1
def polaplasiasmos(self):
    if (flag==1):
        prksi="pola"
        flag=flag+1
def dieresi(self):
    if (flag==1):
        prksi="dier"
        flag=flag+1
def bison(self):
    if (flag==3):
        if (prksi=="pros"):
            c=a+b
if (prksi=="afe"):
            c=a-b
if (prksi=="pola"):
            c=a*b
if (prksi=="dier"):
            c=a/b
 
w=Label(root,text=" ")
w.grid(row=0, column=3)
ison=Button(root,text="=",command=bison)
ison.grid(row=4, column=2)
mhden=Button(root,text="0",command=bmhden)
mhden.grid(row=4, column=1)
ena=Button(root,text="1",command=bena)
ena.grid(row=3, column=0)
duo=Button(root,text="2",command=bduo)
duo.grid(row=3, column=1)
tria=Button(root,text="3",command=btria)
tria.grid(row=3, column=2)
tesse=Button(root,text="4",command=btesse)
tesse.grid(row=2, column=0)
pent=Button(root,text="5",command=bpent)
pent.grid(row=2, column=1)
eksi=Button(root,text="6",command=beksi)
eksi.grid(row=2, column=2)
efta=Button(root,text="7",command=befta)
efta.grid(row=1, column=0)
oxto=Button(root,text="8",command=boxto)
oxto.grid(row=1, column=1)
enia=Button(root,text="9",command=benia)
enia.grid(row=1, column=2)
sun=Button(root,text="+",command=prosthesi)
sun.grid(row=1, column=3)
plhn=Button(root,text="-",command=aferesi)
plhn.grid(row=2, column=3)
epi=Button(root,text="*",command=polaplasiasmos)
epi.grid(row=3, column=3)
dia=Button(root,text="/",command=dieresi)
dia.grid(row=4, column=3)
exit=Button(root,text="Exit", command=sys.exit)
exit.grid(row=4, column=0)
root.mainloop()
 

 

Δώσε αστέρια!

MO: (ψήφοι: 0)

Σχόλια

Να σου πω την αλήθεια μόνο C ξέρω δηλαδή μαθαίνω τ'ωρα...αλλα άν κρίνω απο όσα έχω αντιμετωπίσει θα έχεις ξεχάσει κάποιο argument σε κάποια συνάρτηση...στην bena() συγκεκριμένα...κοίταξε λίγο αν θα μπορούσες να έχεισ bena(1) η κάτι παρόμοιο...αυτό που έχεις βάλει για κάποιο λόγο δεν το περνάει σαν argument. Ελπίζω να έρθει γρήγορα μια άλλη απάντηση που να ξέρει...

 Μάλλον πρέπει να μελετήσεις λίγο καλύτερα τον ορισμό των συναρτήσεων (functions) 

και γενικότερα το συντακτικό της Python ( π.χ. τα "if" δεν χρειάζονται 

παρενθέσεις ). Επίσης η λέξη "self" χρησιμοποιείται γενικώς ως αυτοαναφορά

κατά τη δημιουργία κλάσεων και όχι στις συναρτήσεις.

Ξεκίνα ίσως με κάτι πιο απλό έτσι ώστε να καταλάβεις ακριβώς το τι συμβαίνει

και στη συνέχεια προχώρα. Θα σου συνιστούσα μετά από λίγο "παιχνίδι" με

το Tkinter να μεταφερθείς στην wxPython που είναι πολύ καλύτερη ...γενικώς!

 

Elias