Checkbutton Frage/Problem - Anregung gesucht
@Kalli87: Zur Frage am Rand: Das passiert nicht nur bei Deinem Code. Wenn man Fehler sieht die nahelegen das jemand etwas nicht vollständig verstanden hat oder so wichtige, grundlegende Sachen wie schlechte Namensgebung, sollte man da dann etwa nichts sagen? Das führt letztendlich nur zu Folgeproblemen wenn man das nicht angeht.
@Kalli87: nimm's nicht persönlich. Die Kritik soll Dir helfen, selbst an Deinem Code zu arbeiten. Jeder unnötige Balast macht ihn schwerer Lesbar, auch für Dich. Funktionen sollen möglichst gekapselt sein, also so wenig Interaktion mit der Außenwelt haben wie möglich. Weil jede Interaktion eine potentielle Fehlerquelle ist. Unsinnige Attribut-Zuweisungen sind so ein Fall.
@BlackJack und @Sirius3: Ach quatsch! Darüber braucht ihr euch keinen Kopf machen das ich das persönlich nehme Der Thread heißt ja auch nicht umsonst
"Checkbutton Frage/Problem - Anregung gesucht" und außerdem will ich ja auch lernen Nur das Ihr ab und zu darunter leiden müsst nehmt ihr ja schon in kauf und ich muss damit leben das eure Antworten ziemlich raffiniert verschlüsselt sind bzw. so umschrieben sind das man Sie auf Anhieb nicht versteht und ich diese teilweise mehrmals lesen muss um diese zu verstehen Also ich seh es vollkommen gelassen obwohl es manchmal schon den Tag vermießen kann
"Checkbutton Frage/Problem - Anregung gesucht" und außerdem will ich ja auch lernen Nur das Ihr ab und zu darunter leiden müsst nehmt ihr ja schon in kauf und ich muss damit leben das eure Antworten ziemlich raffiniert verschlüsselt sind bzw. so umschrieben sind das man Sie auf Anhieb nicht versteht und ich diese teilweise mehrmals lesen muss um diese zu verstehen Also ich seh es vollkommen gelassen obwohl es manchmal schon den Tag vermießen kann
Ich bräuchte mal nen Gedankenanstoß von euch
Und zwar möchte ich, hier in diesem Fall sinds 2 Checkbutton die aus der Schleife entstehen, so ansprechen das jeder seinen eigenen Wert hat.
Aktuell siehts eher so aus das jeder von diesen 2 alle Werte hat bzw jeder den letzten Wert hat, schöner is es wenn das getrennt wäre.
Das ganze hatte ich außerhalb der beiden "for-Schleifen" versucht aber ohne Erfolg.
Über "command" hab ich es halt versucht mir das ganze irgendwie getrennt auszugeben was nicht funktionierte.
Und zwar möchte ich, hier in diesem Fall sinds 2 Checkbutton die aus der Schleife entstehen, so ansprechen das jeder seinen eigenen Wert hat.
Aktuell siehts eher so aus das jeder von diesen 2 alle Werte hat bzw jeder den letzten Wert hat, schöner is es wenn das getrennt wäre.
Das ganze hatte ich außerhalb der beiden "for-Schleifen" versucht aber ohne Erfolg.
Code: Alles auswählen
self.cursor.execute("select bilder.studie_nr, bilder.serie_nr, bilder.image_nr from bilder, patient where patient.patnu=bilder.patnu and patient.patnu=%s", [self.eingabe.get()])
self.checkbox=[]
for row,(studie, serie, image) in enumerate(self.cursor, 1):
label_data = \
[
(row, 'lightblue'),
(self.datum_ausgabe, ''),
(image, ''),
(serie, ''),
(studie, ''),
]
self.serie_studie=('Serie: {} Studie: {}'.format(serie,studie))
self.checkbox.append(self.serie_studie)
for column, (text, background) in enumerate(label_data):
Label(self.ueberframe, text=text, relief='sunken', anchor=CENTER, background=background).grid(row=row, column=column, sticky=NSEW)
Checkbutton(self.ueberframe,text=self.serie_studie,variable=self.serie_studie,command=self.list_checkbox).grid(row=row, column=5)
@Kalli87: zum allerletzten Mal, welche Variablen sollten **keine** Attribute von self sein? Und ich will jetzt mindestens zwei Variablen wissen
Und was für ein Typ muß das Objekt haben, das Du dem variable-Argument von Checkbutton übergibst?
Bevor Du wieder irgendwo anders herumprobierst, beantworte bitte diese zwei Fragen, sonst drehen wir uns hier noch bis Weihnachten im Kreis.
Und was für ein Typ muß das Objekt haben, das Du dem variable-Argument von Checkbutton übergibst?
Bevor Du wieder irgendwo anders herumprobierst, beantworte bitte diese zwei Fragen, sonst drehen wir uns hier noch bis Weihnachten im Kreis.
@Kalli87: im Moment gerade ein IntVar, weil Du on- und off-Value wieder entfernt hast. "datum_ausgabe" hatte ich jetzt gar nicht auf dem Schirm, weil das von irgendwo außerhalb Deines Code-Schnipsles kam. Also bleibt noch mindestens ein Attribut das nicht sein sollte.
@Siruis3: Bist du dir da ganz sicher? Ich würde dir da jetzt voll widersprechen, aus dem Grund weil:
cursor liegt außerhalbe
ueberframe liegt ebenso außerhalb
list_checkbox liegt genauso außerhalb
cursor liegt außerhalbe
ueberframe liegt ebenso außerhalb
list_checkbox liegt genauso außerhalb
Code: Alles auswählen
self.cursor.execute("select bilder.studie_nr, bilder.serie_nr, bilder.image_nr from bilder, patient where patient.patnu=bilder.patnu and patient.patnu=%s", [self.eingabe.get()])
self.checkbox=StringVar()
for row,(studie, serie, image) in enumerate(self.cursor, 1):
checkboxen=[]
label_data = \
[
(row, 'lightblue'),
(datum_ausgabe, ''),
(image, ''),
(serie, ''),
(studie, ''),
]
serie_studie=('Serie: {} Studie: {}'.format(serie,studie))
checkboxen.append(self.checkbox)
for column, (text, background) in enumerate(label_data):
Label(self.ueberframe, text=text, relief='sunken', anchor=CENTER, background=background).grid(row=row, column=column, sticky=NSEW)
Checkbutton(self.ueberframe,text=serie_studie,variable=self.checkbox, onvalue=serie_studie, offvalue="",command=self.list_checkbox).grid(row=row, column=5)
Und das sind wir wieder am Anfang des Kreises angekommen... Lies dir doch bitte den gesamten Thread noch einmal in Ruhe durch und versuche die Ratschläge zu verstehen. Du korrigierst hier ständig einen Fehler und baust dafür einen alten wieder ein. Das ist Raten, nicht Programmieren.
Das Leben ist wie ein Tennisball.
@EyDu: Und das is das was ich nicht verstehe. Ich weiß das ich die StringVar an eine liste hängen muss, was ich ja auch mache. Aber trotzdem es nicht geht und da kann ich die ganzen Thread 5 mal lesen und ich seh es trotzdem nicht.
ok bitte mal Schritt für Schritt damit ich den Fehler mal sehe.
@Siruis3: Du fragst ja wie viele StringVar ich an meine Liste hänge.
Mit "self.checkbox=StringVar()" setze ich doch die Variable "self.checkbox" mit "StringVar()" fest.
Danach hänge ich das ganze mit "self.checkboxen.append(self.checkbox)" an meine Liste die ich vor der "for-Schleife" definiert hatte, das mit "self.checkboxen=[]".
Für mich heißt doch das im Klartext, da es durch die Schleife läuft, das immer was meine Liste gehangen wird.
Und der zweiten Hinweis von dir darüber Grüble ich immer noch was du genau meinst.
Ich glaub langsam für eure Hinweise sollte man studiert haben
ps.: Um am ende auf den Inhalt zu zugreifen muss ich doch mit get() arbeiten und das doch bei "self.checkbox.get()" da bekomm ich doch den genauen Inhalt raus. (sieht man hier jetzt natürlich nicht aber das stimmt soweit ich es erlesen habe)
pps.: Wo sitzt der Fehlerteufel?
@Siruis3: Du fragst ja wie viele StringVar ich an meine Liste hänge.
Mit "self.checkbox=StringVar()" setze ich doch die Variable "self.checkbox" mit "StringVar()" fest.
Danach hänge ich das ganze mit "self.checkboxen.append(self.checkbox)" an meine Liste die ich vor der "for-Schleife" definiert hatte, das mit "self.checkboxen=[]".
Für mich heißt doch das im Klartext, da es durch die Schleife läuft, das immer was meine Liste gehangen wird.
Code: Alles auswählen
self.cursor.execute("select bilder.studie_nr, bilder.serie_nr, bilder.image_nr from bilder, patient where patient.patnu=bilder.patnu and patient.patnu=%s", [self.eingabe.get()])
checkboxen=[]
for row,(studie, serie, image) in enumerate(self.cursor, 1):
self.checkbox=StringVar()
checkboxen.append(self.checkbox)
label_data = \
[
(row, 'lightblue'),
(datum_ausgabe, ''),
(image, ''),
(serie, ''),
(studie, ''),
]
serie_studie=('Serie: {} Studie: {}'.format(serie,studie))
for column, (text, background) in enumerate(label_data):
Label(self.ueberframe, text=text, relief='sunken', anchor=CENTER, background=background).grid(row=row, column=column, sticky=NSEW)
Checkbutton(self.ueberframe,text=serie_studie,variable=self.checkbox, onvalue=serie_studie, offvalue="",command=self.list_checkbox).grid(row=row, column=5)
Ich glaub langsam für eure Hinweise sollte man studiert haben
ps.: Um am ende auf den Inhalt zu zugreifen muss ich doch mit get() arbeiten und das doch bei "self.checkbox.get()" da bekomm ich doch den genauen Inhalt raus. (sieht man hier jetzt natürlich nicht aber das stimmt soweit ich es erlesen habe)
pps.: Wo sitzt der Fehlerteufel?
@Kalli87: na jetzt hast Du doch den wesentlichen Punkt schon wieder geändert. Also hätte ich ein "ah, jetzt hab ich's endlich kapiert und alles richtig gemacht" erwartet. Da zum Schluß aber eine Frage steht, schau doch nochmal an, was der Unterschied zwischen jetzt und vorher ist.
Zum hundertsten Mal "self": Variablen, die in einer Schleife geschrieben werden, sind höchst selten sinnvollerweise Attribute. Und "self.cursor" sollte kein "self" haben, weil cursor etwas kurzlebiges sind, die man sich nicht über einen Methodenaufruf merken muß.
Zum hundertsten Mal "self": Variablen, die in einer Schleife geschrieben werden, sind höchst selten sinnvollerweise Attribute. Und "self.cursor" sollte kein "self" haben, weil cursor etwas kurzlebiges sind, die man sich nicht über einen Methodenaufruf merken muß.
@Siruis3: Ich weiß das du genauso langsam kochst wie ich aber das mit dem cursor is sicher jetzt nicht das Problem was ich hier habe.
War meine Schritt für Schritt Erklärung falsch oder richtig?? Und nein ich habs immer noch nicht kapiert warum das mal so und dann mal so is.
Ich hab mir mehr als 4 verschiedene Varianten angeschaut es versucht nachzuvollziehen und auch für meine Sache umzusetzen aber *piep* Axt im Wald es funktioniert immer nur ein Checkbutton richtig.
p.: Langsam könnte ich
Eine vernünftige Erklärung wäre echt toll.....
Und bitte, und ich bitte euch wirklich, lasst jetzt bitte diese komischen Hinweise, mir brumt der Schädel......
War meine Schritt für Schritt Erklärung falsch oder richtig?? Und nein ich habs immer noch nicht kapiert warum das mal so und dann mal so is.
Ich hab mir mehr als 4 verschiedene Varianten angeschaut es versucht nachzuvollziehen und auch für meine Sache umzusetzen aber *piep* Axt im Wald es funktioniert immer nur ein Checkbutton richtig.
p.: Langsam könnte ich
Eine vernünftige Erklärung wäre echt toll.....
Und bitte, und ich bitte euch wirklich, lasst jetzt bitte diese komischen Hinweise, mir brumt der Schädel......
Ich versuch mein Glück nochmal obwohl das vllt schon arg ausgereitzt wurde.
Ich hab mir jetzt die Seiten hier im Thread mehrmals gelesen und bin auf gewisse Dinge gestoßen.
Der Code hier funktioniert ja soweit bis auf das Problem was schon ganz am Anfang beschrieben wurde und was jetzt wieder aufgetreten ist, sprich nur ein Checkbutton funktiniert richtig.
Jetzt zu dem was ich erlesen haben. Ihr schreibt das die StringVar in eine Liste übertragen/gespeichert werden müssen damit das Checkbuttons richtig funktionieren, wenn ich das richtig verstanden habe.
Meine Vermutung war ja das ich so:
checkboxen=[]
self.checkbox=StringVar()
checkboxen.append(self.checkbox)
das ganze in eine liste speichere. (Jetzt nur mal grob dargestellt der eigentliche code steht ja darüber)
Kommt das so ungefähr hin?
Meine frage dazu wäre aber wenn ich die StringVar in eine liste packe wie hier in diesem Fall funktioniert ja trotzdem nur der eine Checkbutton richtig. Daher denk ich dass das so nicht richtig funktioniert.
Der nächste Versuch den ich unternommen hatte war:
checkboxen.append(StringVar())
so würde ich die StringVar direkt in die Liste speichern statt wie oben beschrieben.
Das Problem was dabei aber aufkommt ist, das ich dann nicht mehr mit get() arbeiten kann da eine Listen-Objekt nie das Attribut "get" hat.
Da kommt mir natürlich in den Sinn wie ich dann auf die gespeicherten Dinge in der Liste zu greifen kann wenn das nicht mit "get" geht?
Ohne "get" sieht ja die ausgabe so aus: <tkinter.StringVar object at 0x2809310>
Ein anderer Hinweis von euch war "vergleiche den "on"-Wert der Checkbutton.
Meine Frage dazu wäre: Wie denn? In keinem Beispiel was ich gesucht und gefunden habe wurde der "on"-Wert verglichen.
Ein anderer Hinweis war das die "self.checkbox=StringVar()" überschrieben wird, da diese ja in der Schleife steht, spaßeshalber hatte ich Sie vor die Schleife gesetzt und schon ging ja das ganze mit der Wertübergabe aber dafür gingen die Checkbuttons nicht mehr richtig. Da immer nur einer Aktiv bleiben konnte. Bzw. deswegen sollte ich diese in eine Liste speichern aber da gabs ja wieder ein anderes Problem was ich schon beschrieben habe.
Im großen und ganzen kann ich jetzt sagen das alles mit der StringVar zusammenhängt, wo Sie steht und wie diese verwendet werden soll.
Zum Abschluss jetzt meine genaue Frage/Fragen:
Wie soll ich nun weiter verfahren?
Welcher Hinweis ist nun der für mich am geeignetsten oder sind alle Hinweise für mich relevant?
Danke
Edit: Was unterstrichen ist wurde hinzugefügt
Code: Alles auswählen
checkboxen=[]
self.checkbox=[]
for row,(studie, serie, image) in enumerate(cursor, 1):
self.checkbox=(StringVar())
checkboxen.append(self.checkbox)
label_data = \
[
(row, 'lightblue'),
(datum_ausgabe, ''),
(image, ''),
(serie, ''),
(studie, ''),
]
serie_studie=('Serie: {} Studie: {}'.format(serie,studie))
for column, (text, background) in enumerate(label_data):
Label(self.ueberframe, text=text, relief='sunken', anchor=CENTER, background=background).grid(row=row, column=column, sticky=NSEW)
Checkbutton(self.ueberframe,text=serie_studie,variable=self.checkbox, onvalue=serie_studie, offvalue="",command=self.list_checkbox).grid(row=row, column=5,sticky=E)
Der Code hier funktioniert ja soweit bis auf das Problem was schon ganz am Anfang beschrieben wurde und was jetzt wieder aufgetreten ist, sprich nur ein Checkbutton funktiniert richtig.
Jetzt zu dem was ich erlesen haben. Ihr schreibt das die StringVar in eine Liste übertragen/gespeichert werden müssen damit das Checkbuttons richtig funktionieren, wenn ich das richtig verstanden habe.
Meine Vermutung war ja das ich so:
checkboxen=[]
self.checkbox=StringVar()
checkboxen.append(self.checkbox)
das ganze in eine liste speichere. (Jetzt nur mal grob dargestellt der eigentliche code steht ja darüber)
Kommt das so ungefähr hin?
Meine frage dazu wäre aber wenn ich die StringVar in eine liste packe wie hier in diesem Fall funktioniert ja trotzdem nur der eine Checkbutton richtig. Daher denk ich dass das so nicht richtig funktioniert.
Der nächste Versuch den ich unternommen hatte war:
checkboxen.append(StringVar())
so würde ich die StringVar direkt in die Liste speichern statt wie oben beschrieben.
Das Problem was dabei aber aufkommt ist, das ich dann nicht mehr mit get() arbeiten kann da eine Listen-Objekt nie das Attribut "get" hat.
Da kommt mir natürlich in den Sinn wie ich dann auf die gespeicherten Dinge in der Liste zu greifen kann wenn das nicht mit "get" geht?
Ohne "get" sieht ja die ausgabe so aus: <tkinter.StringVar object at 0x2809310>
Ein anderer Hinweis von euch war "vergleiche den "on"-Wert der Checkbutton.
Meine Frage dazu wäre: Wie denn? In keinem Beispiel was ich gesucht und gefunden habe wurde der "on"-Wert verglichen.
Ein anderer Hinweis war das die "self.checkbox=StringVar()" überschrieben wird, da diese ja in der Schleife steht, spaßeshalber hatte ich Sie vor die Schleife gesetzt und schon ging ja das ganze mit der Wertübergabe aber dafür gingen die Checkbuttons nicht mehr richtig. Da immer nur einer Aktiv bleiben konnte. Bzw. deswegen sollte ich diese in eine Liste speichern aber da gabs ja wieder ein anderes Problem was ich schon beschrieben habe.
Im großen und ganzen kann ich jetzt sagen das alles mit der StringVar zusammenhängt, wo Sie steht und wie diese verwendet werden soll.
Zum Abschluss jetzt meine genaue Frage/Fragen:
Wie soll ich nun weiter verfahren?
Welcher Hinweis ist nun der für mich am geeignetsten oder sind alle Hinweise für mich relevant?
Danke
Edit: Was unterstrichen ist wurde hinzugefügt