[Python-de] Problem mit Checkbutton in der Objektorientierung

Martin Grabbel mgrabbel at web.de
Fri May 16 09:45:08 EDT 2003


* Jan Voges <jan.voges at gmx.de> [030515 20:30]:
>On 15 May 2003 at 15:30, Martin Grabbel wrote:
>> Da ich möchte, daß man beliebige Checkbuttons anklicken kann, müssen
>> diesen jeweils eigene Variablen zugewiesen werden, wo ich leider
>> nicht rauskriege, wie ich das am besten lösen kann.
>
>Wenn Dein Ziel eine Liste mit den gewählten Begriffen ist, dann
>könntest Du es z.B. machen:
>...
> self.checkVarList = []
> for i in allObjects:
>...
>   # Checkbuttons erzeugen
>   if i[1] == "c":
>     self.checkVarList.append(StringVar())
>     self.oneObject = Checkbutton
>                     (...,variable=self.checkVarList[-1], ...)
>...
>print [check.get() for check in genreList.checkVarList
>                                          if len(check.get())]
>
>Ausgabe: ['Horror', 'Drama']

Hi Jan!

Habe die Programmzeilen einmal in mein Script implementiert, aber
als Ausgabe kommt lediglich ein
[]

Mein Class sieht jetzt folgendermaßen aus:
class auswahl:
  def radiocheck (self,label,allObjects):
    self.checkObject = []
    personalFrame = Frame (mainwindow)			
    personalFrame.pack (side=LEFT, fill=X, expand=1)
    personalLabel = Label (personalFrame, text=label)
    personalLabel.pack (side=TOP, anchor=W)
    for i in allObjects:
      ...
      if i[1] == "c":				
        self.checkObject.append(StringVar())
        print "self.checkObject ",self.checkObject[-1],"
",str(i[0])
        self.oneObject = Checkbutton (personalFrame, text=i[0],
variable=self.checkObject[-1], onvalue=i[0], offvalue="")
        self.oneObject.pack (side=TOP, anchor=W)
      ...

Aufgerufen wird sie nach wie vor durch:
global objectGenreList,genreList
objectGenreList = (('Komödie','c'),('Horror','c'),('Drama','c'))
genreList = auswahl()
genreList.radiocheck('Genre:',objectGenreList)

Die Ausgabe findet über folgende Zeile testweise statt:
print [i.get() for i in genreList.checkObject if len(i.get())]

^^^ Diese Syntax war mir so bisher auch nicht bekannt. Obwohl sie im
Nachhinein eigentlich logisch ist.

Leider bringt es so immer noch keinen Erfolg. Irgendwo mache ich
immer noch einen Fehler.
Die Variable i[0] enthält definitiv die Namen der einzelnen
Listenpunkte und die Ausgabe von genreList.checkObject zeigt mir
folgendes:
[<Tkinter.StringVar instance at 0x82d75a4>, <Tkinter.StringVar
instance at 0x82d781c>, <Tkinter.StringVar instance at 0x82d7c04>,
<Tkinter.StringVar instance at 0x82d89fc>, <Tkinter.StringVar
instance at 0x82d8f64>, <Tkinter.StringVar instance at 0x82d98dc>,
<Tkinter.StringVar instance at 0x82d95ec>, <Tkinter.StringVar
instance at 0x82da844>]
Das scheint also alles soweit zu funktionieren. Aber wieso bleibt
die Liste nach auslesen leer?

Gruß,

Martin





More information about the Python-de mailing list