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.
Antworten
htw7448
User
Beiträge: 51
Registriert: Montag 16. April 2007, 10:59
Wohnort: Messel(Hessen)
Kontaktdaten:

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:

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:

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 :)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
htw7448
User
Beiträge: 51
Registriert: Montag 16. April 2007, 10:59
Wohnort: Messel(Hessen)
Kontaktdaten:

ja werde ich heut abend oder morgen mal einschieben.
Antworten