def in for-Schleife

Fragen zu Tkinter.
Benutzeravatar
Arthur
User
Beiträge: 23
Registriert: Sonntag 12. November 2006, 18:07

def in for-Schleife

Beitragvon Arthur » Samstag 10. Februar 2007, 19:55

ich möchte für mein aktuelles porgramm ein Menü zur Farbauswahl erstellen mit der möglichkeit das am der user später noch shemen hinzufügen kann.
dazu wollte ich eine liste mit alles shemata erstellen und über die dann die menüeinträge

mein Code:

Code: Alles auswählen

from Tkinter import *

class Farbshema:
    def __init__(self):
        self.shema1={'background':'#006610', 'foreground':'#FFFF00','crbuttonbg2':'#8a4400', 'name':'Jungle'}
        self.shema2={'background':'#F8F8F8', 'foreground':'#2000CC','crbuttonbg2':'#DDDDDD', 'name':'Ice'}
        self.shema3={'background':'#000010', 'foreground':'#FFFFA0','crbuttonbg2':'#000050', 'name':'Stars'}
        self.shema4={'background':'#00C8FF', 'foreground':'#FFFFA0','crbuttonbg2':'#000050', 'name':'Stars'}
        self.shema5={'name':'Windows', 'foreground':'#000000'}
        self.shemata=[self.shema1,self.shema2,self.shema3,self.shema4, self.shema5]
        self.active=self.shema5
    def change(self, master, s, sg1=None, sg2=None, par=None, menu=None):
        self.activ=s
        if not s['name']=='Windows':
            master.tk_setPalette(background=s['background'], foreground=s['foreground'],
                               activeForeground=s['foreground'],activeBackground=s['background'],
                               selectColor=s['crbuttonbg2'],selectBackground=s['foreground'],
                               selectForeground=s['background'],insertBackground=s['crbuttonbg2'],
                               highlightBackground=s['background'],disabledForeground=s['foreground'],
                               highlictColor=s['foreground'])
            master['bg']=s['crbuttonbg2']
            for x in sg1.f:
                x.config(selectcolor=s['background'])
            for x in sg2.f:
                x.config(selectcolor=s['background'])
            menu.farbmenu.config(bg='#C0C0B4', fg='#000000')
            par.tisch.config(bg=s['crbuttonbg2'])
            par.tisch.itemconfig('all', fill=s['foreground'])


#Menu:

class Menuleiste:
    def __init__(self, master, col, sg1=None, sg2=None, par=None):
        self.leiste=Menu(master, font=myfont)
        master.config(menu=self.leiste)
        self.farbmenu=Menu(self.leiste, font=myfont)
        self.leiste.add_cascade(label='Farb-Optionen', menu=self.farbmenu)
        a=[]
        for x in col.shemata:
            def y():
                col.change(root, x, sg1=sg1, sg2=sg2, par=par, menu=self)
            a=a+[x,y]
        for z in a:
            self.farbmenu.add_command(label=z[0]['name'], command=z[1], font=myfont)
        col.change(root, col.active, sg1=sg1, sg2=sg2, par=par, menu=self)

colors=Farbshema()

root=Tk()
#...anderen Klassen...
menuleiste=Menuleiste(root, colors, sg1=stargate1, sg2=stargatea, par=parabelrechner)


wenn ich das ganze jedoch anschmeiße giebt er immer den fehler aus:

line 52, in __init__
self.farbmenu.add_command(label=z[0]['name'], command=z[1], font=myfont)
KeyError: 0


meine Frage:

leigt es an dem def in der forschleife???
BlackJack

Beitragvon BlackJack » Samstag 10. Februar 2007, 20:38

Das liegt daran das ein Farbschema-Dictionary die 0 nicht als Schlüssel hat. Die Zeile vor dieser ``for``-Schleife macht wahrscheinlich nicht das was Du denkst. Das erweitert die Liste um zwei weitere einzelne Elemente. Versuch's mal mit ``a.append((x, y))``.
Benutzeravatar
Arthur
User
Beiträge: 23
Registriert: Sonntag 12. November 2006, 18:07

Beitragvon Arthur » Samstag 10. Februar 2007, 23:27

er giebt jetzt zwar keine fehlermeldungen mehr aus, aber die umkonfigurtion des Farbshemas funktioniert trotzdem nicht
Benutzeravatar
Arthur
User
Beiträge: 23
Registriert: Sonntag 12. November 2006, 18:07

Beitragvon Arthur » Dienstag 13. Februar 2007, 15:07

Ich bin nicht verrückt!
Nur verhaltensoriginell!

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder