Seite 1 von 1

def in for-Schleife

Verfasst: Samstag 10. Februar 2007, 19:55
von Arthur
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???

Verfasst: Samstag 10. Februar 2007, 20:38
von BlackJack
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))``.

Verfasst: Samstag 10. Februar 2007, 23:27
von Arthur
er giebt jetzt zwar keine fehlermeldungen mehr aus, aber die umkonfigurtion des Farbshemas funktioniert trotzdem nicht

Verfasst: Dienstag 13. Februar 2007, 15:07
von Arthur