Hallo!
Ich habe folgendes Problem:
ich möchte mit einer Liste Berechnungen machen. Diese kann man in ein Entry Feld eingeben (1) oder als txt File laden (> 1). Nur dann weiss ich nicht weiter. Wie kann ich nach dem Laden mit meinen Methoden weiterfahren? Bei dem Entry Feld hab ich ja meine Methode und diese enthählt die Liste aus entry.get() . Soll ich in die Methode "Laden" meine Methode "Berechnung" mit einbauen? Nur dann hab ich sie ja doppelt (einmal für Entry und einmal für Laden) und das ist ja unschön...Oder einen Button in "Laden" mit einfügen die dann das Kommando zur Methode "Berechnen" ausführt?
Ich hoffe es ist verständlich...Falls nicht kann ich auch meinen Code angeben. Vielleicht gibt es einen standard Weg!?
lg Stefanie
Liste aus Entry oder File-und dann?
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
Hi Stefanie!
könntest das doch inetwa so machen:
Du hast eine Auswal, in der man entweder eine Liste über ein Entry eingeben kann, oder statt der Liste ein Fileobj. auswählt (tkFileDialog).
Du nimmst den Dateinamen von "askopenfilename" und setzt ihn in das Entry.Nach einem Klick auf den Bestätigungsbutton, rufst du eine Methode auf, die dann nach ner Fallunterscheidung (entweder vorher ne Variable setzen oder mit os.path.isfile testen) aus dem Filename (wenns einer ist) einen String macht, und ihn mit diesem überschreibt. Im "allgemeinen" Teil, nach dem if-Block, verarbeitest du dann den String, der in der übergebenen (und evtl. bereits überschriebenen) Variable gespeichert ist, zu einer Liste (mit split(", ") oder so).
LG
Also ein Stück Code würde echt helfen. Was ist denn genau dein Problem? Aus dem String, den du aus dem Entry oder der Textdatei lädst, eine Liste machen? Oder was?ete hat geschrieben: Ich hoffe es ist verständlich...Falls nicht kann ich auch meinen Code angeben. Vielleicht gibt es einen standard Weg!?
könntest das doch inetwa so machen:
Du hast eine Auswal, in der man entweder eine Liste über ein Entry eingeben kann, oder statt der Liste ein Fileobj. auswählt (tkFileDialog).
Du nimmst den Dateinamen von "askopenfilename" und setzt ihn in das Entry.Nach einem Klick auf den Bestätigungsbutton, rufst du eine Methode auf, die dann nach ner Fallunterscheidung (entweder vorher ne Variable setzen oder mit os.path.isfile testen) aus dem Filename (wenns einer ist) einen String macht, und ihn mit diesem überschreibt. Im "allgemeinen" Teil, nach dem if-Block, verarbeitest du dann den String, der in der übergebenen (und evtl. bereits überschriebenen) Variable gespeichert ist, zu einer Liste (mit split(", ") oder so).
LG
Du schreibst eine eigene Methode/Funktion zum Ausführen der Berechnungen, welche die Liste als Parameter erhält.
Dann kannst du diese entweder mit einer aus einer Datei geladenen Liste oder mit der in der GUI eingegebenen Liste aufrufen.
Für mehr Hilfe müsste man schon den Code sehen...
Dann kannst du diese entweder mit einer aus einer Datei geladenen Liste oder mit der in der GUI eingegebenen Liste aufrufen.
Für mehr Hilfe müsste man schon den Code sehen...
ok hier mal der Code, ich hab den problematischen Part auskommentiert...
Edit (Leonidas): Code ausgelagert.
Wie kann ich dem Programm jetzt sagen, ob die Liste aus dem Entry Feld oder aus dem File kommt?
MFG
Edit (Leonidas): Code ausgelagert.
Wie kann ich dem Programm jetzt sagen, ob die Liste aus dem Entry Feld oder aus dem File kommt?
MFG
- Mawilo
- User
- Beiträge: 454
- Registriert: Sonntag 22. Februar 2004, 10:58
- Wohnort: Sachsen
- Kontaktdaten:
Hallo Stefanie
ich würde die Liste laden und in das Entry-Feld stellen.Dann sieht der User, was geladen wurde und für das Programm muss Du keine Unterscheidung machen. Ggf. musst Du natürlich das Entry vorher leeren.
Mawilo
ich würde die Liste laden und in das Entry-Feld stellen.
Code: Alles auswählen
entry.insert(END, text)
Mawilo
Aber das File kann hunderte von Einträgen haben-geht das dann?
Eingabe sieht etwa so aus:
GCA TGC TGG CGG TGC TGG AG
CCG AGC ACG ATG GCT GCA GGT
CAG CCA TCG TGC TCG GTC CTG A
GCA GCA GGT AGC TGG TGG GGA GT
Die Berechnung erfolgt ja für jeden Primer (Sequenz). Es werden am Ende also 4 Tm Werte ausgegen (wenn man beim Bsp. bleibt)
Eingabe sieht etwa so aus:
GCA TGC TGG CGG TGC TGG AG
CCG AGC ACG ATG GCT GCA GGT
CAG CCA TCG TGC TCG GTC CTG A
GCA GCA GGT AGC TGG TGG GGA GT
Die Berechnung erfolgt ja für jeden Primer (Sequenz). Es werden am Ende also 4 Tm Werte ausgegen (wenn man beim Bsp. bleibt)
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
Das halte ich für eine schlechte Lösung. Denn wenn man eine Datei läd, dann deshalb, weil man weiß was drinsteht und weil das viel ist. In so ein Entry passt ja kaum was rein, vor allem nix mehrzeiliges. Wenn es wünschenswert wäre, müsste man schon ein Textfeld nehmen.Mawilo hat geschrieben:ich würde die Liste laden und in das Entry-Feld stellen.
Ich hatte oben an sowas gedacht:
http://paste.pocoo.org/show/2691/
Aufgrund eines unvollkommenen Programmverständnisses erst fast lauffähig.

- Mawilo
- User
- Beiträge: 454
- Registriert: Sonntag 22. Februar 2004, 10:58
- Wohnort: Sachsen
- Kontaktdaten:
Ich dachte auch, dass es nur wenige Einträge sind. Die vielen Einträge können aber gut in einem Textfenster (ScrolledText) dargestellt werden.
Ich habe hier mal ein Beispiel erstellt.
Aufgefallen ist mir, dass Du in den Zeilen 44 bis 47 Variablen den Bezeichnungen self.entry1 bis self.entry4 zuweist und wenig später in den Zeilen 63 bis 66 die Variablen schon wieder mit den Entrys überschreibst. Da bekommst Du garantiert ein Problem bei der Berechnung. Ich kennzeichne Variablen immer besonders (z.B. self.var_entry1), wobei sich bei mir das Durchnummerieren von Elementen nicht bewährt hat. Sobald Du später noch ein Element einfügen möchtest, wird es schwierig.
Mawilo
Ich habe hier mal ein Beispiel erstellt.
Aufgefallen ist mir, dass Du in den Zeilen 44 bis 47 Variablen den Bezeichnungen self.entry1 bis self.entry4 zuweist und wenig später in den Zeilen 63 bis 66 die Variablen schon wieder mit den Entrys überschreibst. Da bekommst Du garantiert ein Problem bei der Berechnung. Ich kennzeichne Variablen immer besonders (z.B. self.var_entry1), wobei sich bei mir das Durchnummerieren von Elementen nicht bewährt hat. Sobald Du später noch ein Element einfügen möchtest, wird es schwierig.
Mawilo
Ah, danke für die Bsp.! Ich wusste nicht das es über ein Textfeld funktioniert...
Ja, Mawilo du hast recht, ist mir auch schon beim Schreiben aufgefallen...Darum wollte ich mich später kümmern, erstmal soll es laufen
Also vielen Dank
Stefanie
Ja, Mawilo du hast recht, ist mir auch schon beim Schreiben aufgefallen...Darum wollte ich mich später kümmern, erstmal soll es laufen

Also vielen Dank

Stefanie
Hab jetzt aber folgendes Problem:
Die Berchechnungen werden jetzt pro gesamt Inhalt des Textfeldes berechnet, also nicht pro Zeile.
Bsp. wie es funktionieren soll:
Eingabe
atgctctgatgctcgat
gtcgctgatcgatgct
taggctgattctcgatgcgctga
Ausgabe
Wert1
Wert2
Wert3
Momentan bekomm ich einen Wert für alle 3 Zeilen.
Die Berchechnungen werden jetzt pro gesamt Inhalt des Textfeldes berechnet, also nicht pro Zeile.
Bsp. wie es funktionieren soll:
Eingabe
atgctctgatgctcgat
gtcgctgatcgatgct
taggctgattctcgatgcgctga
Ausgabe
Wert1
Wert2
Wert3
Momentan bekomm ich einen Wert für alle 3 Zeilen.
- Mawilo
- User
- Beiträge: 454
- Registriert: Sonntag 22. Februar 2004, 10:58
- Wohnort: Sachsen
- Kontaktdaten:
Wenn die Werte immer nur über eine Zeile gehen, kannst Du den Inhalt des Textfeldes am Zeilenumbruch aufteilen und mit den einzelnen Zeilen weiterarbeiten.
Beispiel:
Mawilo
Beispiel:
Code: Alles auswählen
def berechnen(self):
x = self.textfeld.get(0.0, END)
lines = x.split('\n')
for line in lines:
print 'mach was mit: %s'%line
Hallo!
Danke für den Tip!
Lieder wird am Ende des Textfeldes eine leere Zeichenkette zugefügt?!
Wie kann ich das vermeiden? Diese wird nämlich mitbrechnet und ich bekomme einen (falschen) Wert dafür!
Bei Bedarf kann ich nochmal den aktuellen Code posten...
Liebe Grüsse
Stefanie
Danke für den Tip!
Lieder wird am Ende des Textfeldes eine leere Zeichenkette zugefügt?!
Wie kann ich das vermeiden? Diese wird nämlich mitbrechnet und ich bekomme einen (falschen) Wert dafür!
Bei Bedarf kann ich nochmal den aktuellen Code posten...
Liebe Grüsse
Stefanie
- Mawilo
- User
- Beiträge: 454
- Registriert: Sonntag 22. Februar 2004, 10:58
- Wohnort: Sachsen
- Kontaktdaten:
Das letzte Element der Liste ist in diesem Fall leer.
Hier mal ein aufgehübschtes Beispiel:
Mawilo
Hier mal ein aufgehübschtes Beispiel:
Code: Alles auswählen
def berechnen(self):
x = self.textfeld.get(0.0, END)
lines = x.split('\n')
for line in lines:
if line != '':
print 'mach was mit: %s'%line