ist das mit itertools machbar?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
htw7448
User
Beiträge: 51
Registriert: Montag 16. April 2007, 10:59
Wohnort: Messel(Hessen)
Kontaktdaten:

ist das mit itertools machbar?

Beitragvon htw7448 » Dienstag 7. August 2007, 11:28

ich bin gerade völlig planlos wie ich die itertools auf mein Beispiel anwenden kann bzw was evtl besser gehen sollte.

Code: Alles auswählen

# -*- coding: iso-8859-1 -*-

import pygtk
pygtk.require('2.0')
import gtk
from itertools import izip, count

class Test:
   def delete_event(self, widget, event, data=None):
      print "delete event ausgelöst"
      return False
   
   def destroy(self, widget, data=None):
      gtk.main_quit()
      
   def changed_cb(self, combobox):
      model = combobox.get_model()
      self.index = combobox.get_active()
      if self.index:
         print 'Element :', model[index][0], 'gewählt!'
         print self.index
         return self.index
      
   def c1string(self, liste=None):
      return {'1':['a', 'b', 'c'], '2':['f', 'g', 'h'], '3': ['x', 'y', 'z']}
   
   def __init__(self):
      self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
      self.window.set_border_width(10)
      self.window.set_title('test')
      
      self.vbox_1 = gtk.VBox(False, 0)
      self.window.add(self.vbox_1)
      
      c1string = self.c1string()
      c1stringkeys= c1string.keys()
      c1stringkeys.sort()
      liststore = gtk.ListStore(str)
      for n in c1stringkeys:
         liststore.append(['%s'%n])
      self.combo = gtk.combo_box_new_text()
      self.combo.set_model(liststore)
      self.combo.set_active(0)
      self.vbox_1.pack_start(self.combo, True, True, 0)
      #for number, value in izip(count(1), c1string[self.index]):
      #   entry,number = gtk.Entry()
      
      #handlers
      
      self.window.connect('delete_event', self.delete_event)
      self.window.connect("destroy", self.destroy)
      self.combo.connect('changed', self.changed_cb)      
      
      #shows
      
      self.combo.show()
      self.vbox_1.show()
      self.window.show()
      
def main():
   gtk.main()
      
if __name__ == "__main__":
   launch = Test()
   main()


Problem: Ich möchte gern über den aktiven Key in c1string, entrys seiner Werte generieren -> z.B. entry1, entry2 etc. Also abhängig von der aktuellen Keywahl sollen dann Textfelder mit den Werten des Keys erzeugt werden.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Mittwoch 8. August 2007, 09:52

Hoi,

kenne mich mit gtk nicht aus, aber Dein Thread scheint übersehen zu sein, also versuche ich mich mal mit etwas (!) allgemeiner Kritik, vielleicht kannst Du das Problem dann lösen:

- schreibe doch __init__-Methoden in den Anfang der Klasse. Sonst verlierst Du bei großen Projekten schnell den Überblick.
- wozu brauchst Du c1string()? Diese Methode ist in meinen Augen überflüssig. Stattdessen kannst Du einfach ein Klassenattribut self.c1string = deindict machen, ggf. mit Methode(n) zum modifizieren.
- Wie Du entscheidest was der "aktive Key" ist weiß ich nicht - muß ich aber auch nicht wissen. Aber in Deinem Fall ist die Liste, die Du haben willst, doch einfach:
c1string[key], oder etwa nicht? Dann kannst Du darüber ganz normal iterieren. Die Verwendung von itertools ist IMHO ein Overkill, wenn Du rel. kurze, ganz "normale" Listen hast.
- Ich nehme an, Du hast bewußt nur dummy-Code gezeigt, falls nicht: Deine Funktionen wollen zum großen Teil Parameter übergeben haben, mit denen sie gar nichts machen.

Habe ich da was falsch verstanden? Dann ist der Thread zumindest wieder oben, wird gesehen und Du hast Gelegenheit zur Klarstellung.

Gruß,
Christian
htw7448
User
Beiträge: 51
Registriert: Montag 16. April 2007, 10:59
Wohnort: Messel(Hessen)
Kontaktdaten:

Beitragvon htw7448 » Mittwoch 15. August 2007, 10:14

Die c1string Methode ist nur ein Platzhalter für eine umfangreichere Methode.

Der "active Key " soll mit der changed_cb Methode ermittelt werden.

Hintergrund: Es soll ein Pulldown Menü mit den Keys aus c1string erzeugt werden. Dort wird über changed_cb der aktuelle Wert ausgegeben. Ein zweites Pulldown Menü zeigt nun die Werte des gewählten Keys vom c1String an.

Mit der auskommentierten Iter Funktion wollte ich die einzelnen Entrys(aus den Werten der Keys) für das 2. Pulldown Menü erzeugen.

Das mit der __init__ Methode am Anfang einer Klasse werde ich mir angewöhnen. Danke :)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 18. August 2007, 22:35

Das dir keiner antwortet liegt daran, dass dein Beispiel GTK benötigt - das haben wenige Leute installiert. Ich bin selbst auch im Moment ohne PyGTK unterwegs. Könntest du eine Minimalversion von deinem Programm schreiben?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
htw7448
User
Beiträge: 51
Registriert: Montag 16. April 2007, 10:59
Wohnort: Messel(Hessen)
Kontaktdaten:

Beitragvon htw7448 » Dienstag 21. August 2007, 11:08

ja werde ich heut abend oder morgen mal einschieben.

Wer ist online?

Mitglieder in diesem Forum: martinjo