Seite 1 von 1

textwidget mit IDs?

Verfasst: Mittwoch 13. Juni 2012, 14:48
von Trollmops
Hallo mal wieder! :)


Ich habe ein Fenster in welchem sich viele Textfelder in folgendem format befinden (Beispiel):

Code: Alles auswählen

        FRAMElist = tk.Text(self,width=20, height=1, bg='white')
        FRAMElist.grid(row=indexa,column=3)
        FRAMElist.insert('0.0',framecount)
ich habe verscheidene Elemente, welche im Verlauf meines Programmablaufs immer wieder auftreten (Messungen), und ich möchte halt darstellen, wie oft diese auftreten. Da ich nun aber eben viele Elemente mit je mehreren Textfeldern habe, also auch Name etc, wüsste ich gerne, ob ich jedes Textfeld mit sowas wie einer ID versehen kann, auf die ich einfach zugreifen kann

pseudocode:
EDIT textwidget where ID = frames



sowas in der Art eben. Bei den Messungen schaue ich, ob der Kandidat schonmal auftrat (durch eindeutig zuordenbare Werte, die ich in einer liste stehen habe), und sollte er bereits in meiner Tabelle (in meinem Fenster) drinstehen würde ich halt nur gerne seinen Zählwert erhöhen. Wie ich das machen würde weiß ich schon, nur steh ich vor dem Problem, dass ich nicht weiß, auf welche Weise ich den richtigen Eintrag erwischen kann

Wüsstet ihr evtl, ob und wie das geht? Gibt es, sollte das nicht funktionieren, evtl Alternativlösungen die ihr mir vorschlagen könntet?


Vielen Dank für eure Zeit im Vorraus,

Gruß, mops

Re: textwidget mit IDs?

Verfasst: Mittwoch 13. Juni 2012, 15:05
von BlackJack
@Trollmops: Du kannst die Widgets doch einfach in eine passende Datenstruktur stecken, also zum Beispiel ein Wörterbuch was die ID für den Wert auf das Widget-Objekt abbildet oder auf eine Liste mit solchen Objekten, wenn es mehr als eines für eine ID gibt.

Re: textwidget mit IDs?

Verfasst: Donnerstag 14. Juni 2012, 13:38
von Trollmops
würde ich dann mal versuchen. nur wie genau soll ich das anstellen? (hast du ein beispiel?)

ich mach grad erst noch was anderes und wenn ich damit durch bin widme ich mich wieder dem o.g. problem :)

danke trotzdem

Re: textwidget mit IDs?

Verfasst: Donnerstag 14. Juni 2012, 14:07
von Hyperion
Trollmops hat geschrieben:würde ich dann mal versuchen. nur wie genau soll ich das anstellen? (hast du ein beispiel?)
Äh... wenn Du nicht weisst, was ein Dictionary ist, dann bist Du bei GUI-Programmierung falsch :P Das ist doch Grundlagenwissen!

Beispiel:

Code: Alles auswählen

frames = {
    "coole_unqiue_id": tk.Text(self,width=20, height=1, bg='white'),
    "noch_ne_id": tk.Text(self,width=20, height=1, bg='white'),
    ...
}

# Zugriff
frames["coole_unique_id"] # -> Text-Widget als Rückgabewert

Re: textwidget mit IDs?

Verfasst: Donnerstag 14. Juni 2012, 15:34
von Trollmops
ich bin bei gui-programmierung nicht falsch, sondern neu, aber ich weiß jetzt was ihr meint ^^

ja, damit könnts klappen, mache mich da die nächsten tage ran und sag dann wies sich entwickelt hat, also danke.

Re: textwidget mit IDs?

Verfasst: Freitag 15. Juni 2012, 16:49
von Hyperion
Trollmops hat geschrieben:ich bin bei gui-programmierung nicht falsch, sondern neu, ...
Ich sagte ja auch: "Wenn Du nicht weisst, was ein Dictionary ist..." ;-) Und dann wärst Du nämlich auch bei Python oder ggf.der Programmierung i.A. neu und damit in der Tat "falsch" bei der GUI-Programmierung!

Re: textwidget mit IDs?

Verfasst: Samstag 16. Juni 2012, 12:10
von Trollmops
ich habe das jetzt mit einer liste in einer liste gelöst, die "sublist" habe ich mit meinen textwidgets gefüllt (ich wollte später ja auch das in column=3 zugreifen), und wenn die zeile fertig war habe ich sie einfach in eine hauptliste eingefügt, deren index der entsprechenden zeile meiner tabelle entsprach.

einzelne textwidgets kann ich jetzt mit

hauptliste[x][y] ansprechen, wobei x der hauptlistenindex und damit auch zeilen index ist, und y der sublistindex, also spaltenindex ist.
den zeilenindex x habe ich per dictionaryeintrag an eine einmalige eigenschaft gekoppelt, sodass ich bei wiederholtem auftreten eines Ereignisses immer weiß in welcher zeile ich dieses notiert habe. der spaltenindex y entspricht ja den entsprechenden eigenschaften (z.b. erste spalte=name, zweite spalte=attribut#1, dritte spalte=auftrittshäufigkeit), und ich kann z.b. gezielt die auftrittshäufigkeit ändern, indem ich auf spalte y=2 zugreife

Code: Alles auswählen

sublist=[] #kommt nur innerhalb dieser funktion vor
first=tk.Text(self,width=20)
first.grid(row=rowindex,column=0)
first,insert('0.0',"nun kann")
sublist.append(first)
second=tk.Text(self,width=20)
second.grid(row=rowindex,column=1)
second.insert('0.0',"ich schoen")
sublist.append(second)
third=tk.Text(self,width=20)
third.grid(row=rowindex,column=2)
third.insert('0.0',"drauf zugreifen")
sublist.append(third)
finallist.append(sublist) #finallist ist global und enthält dann alle einträge)

das ist jetzt mal die ausführliche und ungeloppte griderstellung, damit ihr wisst was ich da nun gemacht habe.



gruß, mops

Re: textwidget mit IDs?

Verfasst: Samstag 16. Juni 2012, 14:29
von Hyperion
Du solltest niemals syntaktisch falschen Code posten ;-)
Trollmops hat geschrieben: den zeilenindex x habe ich per dictionaryeintrag an eine einmalige eigenschaft gekoppelt, sodass ich bei wiederholtem auftreten eines Ereignisses immer weiß in welcher zeile ich dieses notiert habe.
Das kapiere ich nicht! Da wäre ein Beispiel schön; sofern Du für jedes Element einen Dictionary-Eintrag hast, brauchst Du nämlich kein Dictionary.

Code: Alles auswählen

finallist.append(sublist) #finallist ist global und enthält dann alle einträge)
"Global" riecht nach einem Code-Smell... ich hoffe Du meinst nicht wirklich ``global`` oder nutzt das Objekt tatsächlich auf Modulebene?