Wo ist der fehler

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@tigerwood: Du sagst, Du verstehst die Zeilen von pillmuncher, dann mußt Du nur noch die Struktur Deiner Zeile vergleichen und das Prinzip übertragen.

Um es nochmal deutlich zu machen, diese beiden Zeilen sind strukturell gleich:

Code: Alles auswählen

y = Foo(321).double_value()

Code: Alles auswählen

self.g = Checkbutton(labelfr, text="Großbuchstaben", variable=self.groß).grid(row=3, column=0, padx=5, pady=5)
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

tigerwood hat geschrieben:

Code: Alles auswählen

>>> f = Foo(123)      #ERSTELLEN DER ZAHL 123
Nein, das ist falsch. Die Zahl 123 wird nirgends "erstellt", die gibt es einfach, und hier wird mit ihr als Argument ein Foo-Objekt initialisiert. Deswegen heißt die Methode übrigens __init__().
tigerwood hat geschrieben:

Code: Alles auswählen

>>> x = f.double_value()     #ZUWEISUNG DER ZAHL 123 AN X
Nein, eben genau nicht. double_value() ist eine Methode, die den Zustand des Objekts, auf dem sie aufgerufen wird - hier f - ändert, aber nichts zurückgibt. Dieses nichts hat in Python einen Namen: None. Wenn du diesen Rückgabewert einem Namen zuweist, welchen Wert hat dann anschließend dieser Name?

Ich versuch es nochmal etwas weniger abstrakt:

Code: Alles auswählen

>>> class Person:
...     def __init__(self, name, kontostand):
...         self.name = name
...         self.kontostand = kontostand
...     def zahle_ein(self, betrag):
...         self.kontostand += betrag
... 
>>> p = Person('Hansi', 123.45)
>>> p.name
'Hansi'
>>> p.kontostand
123.45
>>> p.zahle_ein(45.67)
>>> p.kontostand
169.12
>>> q = Person('Gretel', 99.99).zahle_ein(100.00)
>>> q is None
True
>>> q.zahle_ein(555.55)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'zahle_ein'
Schau dir insbesondere die Zeilen 8 und 16 an und vergleiche sie. Offensichtlich wird in Zeile 8 ein Person-Objekt erzeugt und an den Namen p gebunden. In Zeile 16 wird ebenfalls ein Person-Objekt erzeugt, aber das wird nicht an einen Namen gebunden, sondern auf ihm wird die Methode zahle_ein() aufgerufen, und deren Ergebnis wird dann an q zugewiesen.

Und nun die € 1.000.000,00 Frage: Was gibt diese Methode als Ergebnis zurück?
In specifications, Murphy's Law supersedes Ohm's.
tigerwood
User
Beiträge: 19
Registriert: Dienstag 30. Mai 2017, 21:55

In diesem Bereich ist mein fehler, in Zeile 3. Was ich nicht weiß was da genau hin muss bzw. wie ich das ändern muss oder ob was gelöscht werden muss. Versuche da ja schon alles möglich aber komme zu keiner Lösung


1 def print_value(self, val):
2 ...if self.groß.get() + self.klein.get() + self.zahl.get() == 0 + self.sonder.get() == 0:
3 ...... self.g.select()
4 ...... self.groß.set(1)
5 ...selection = (self.groß.get(), self.klein.get(), self.zahl.get(),self.sonder.get())
6 ...text_password = generate_password(int(val), selection)
7 ...self.entry.config(state='normal')
8 ...self.entry.delete(0, 'end')
9 ...self.entry.insert('end', text_password
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@tigerwood: nein, der Fehler ist wo ganz wo anders, was wir Dir hier auch schon seit einer Ewigkeit schreiben. pillmuncher ist da sehr geduldig im Erklären.
tigerwood
User
Beiträge: 19
Registriert: Dienstag 30. Mai 2017, 21:55

Kann man mir nicht zumindest sagen in welcher Zeile, dann würde ich das sicher alles verstehen was hier geschrieben wird.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@tigerwood: In Zeile 45.
In specifications, Murphy's Law supersedes Ohm's.
tigerwood
User
Beiträge: 19
Registriert: Dienstag 30. Mai 2017, 21:55

Dann muss in die Zeile noch was dazu?
wie oben bei der Zeile 8 noch das zahle_zu mit hin müsste
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@tigerwoods: Nein, da muss was weg. Schau dir nochmal alle meine Beiträge an und versuch diese auf dein Problem zu übertragen. Hier gibt's Hilfe zur Selbsthilfe, keinen fertigen Code.

Aber das noch:

Code: Alles auswählen

>>> p = Person('Hansi', 123.45)  # Erzeugt eine Person und bindet diese an den Namen p.
>>> p is None  # Ist p == None? Natürlich nicht, sondern p == Person('Hansi', 123.45)
False
>>> p.kontostand  # Was ist der Konstostand von p?
123.45
>>> q = Person('Gretel', 99.99).zahle_ein(100.00)  # Erzeugt eine Person, ruft darauf eine Methode auf und bindet das Ergebnis des Methodenaufrufs an den Namen q. Die Methode liefert als Ergebnis None zurück.
>>> q is None  # Ist q == None? Natürlich, das war ja das Ergebnis des Methodenaufrus.
True
>>> q.kontostand  # Was ist der Konstostand von q? Wenn q == None ist? None hat keinen Kontostand, deswegen:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'kontostand'
In specifications, Murphy's Law supersedes Ohm's.
tigerwood
User
Beiträge: 19
Registriert: Dienstag 30. Mai 2017, 21:55

Da kann doch schon nichts mehr weg. :K
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@tigerwood: Vergleich mal:

Code: Alles auswählen

self.g = Checkbutton(labelfr, text="Großbuchstaben", variable=self.groß).grid(row=3, column=0, padx=5, pady=5)
vs.
self.g = Checkbutton(labelfr, text="Großbuchstaben", variable=self.groß)
Und jetzt versuch zu verstehen, was meine bisherigen Beiträge damit zu tun haben.
In specifications, Murphy's Law supersedes Ohm's.
tigerwood
User
Beiträge: 19
Registriert: Dienstag 30. Mai 2017, 21:55

Wenn ich das jetzt richtig verstehe muss
.grid(row=3, column=0, padx=5, pady=5)
weg.
Nur dann öffnet sich das Programm nicht mehr und wenn sich das Programm öffnen würde würde man den Button nicht mehr sehen
tigerwood
User
Beiträge: 19
Registriert: Dienstag 30. Mai 2017, 21:55

Habe jetzt nochmal das Programm aus dem Forum kopiert weil meins ja schon wieder total anders war.
Das programm öffnent sich aber der Button wird jetzt nicht angezeigt.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@tigerwood: Die darauffolgenden Zeilen sind ja ebenfalls kaputt, das ist nur bisher nicht aufgefallen, weil vorher schon mit einer Exception abgebrochen wurde.

Und natürlich musst du die grid()-Methode immer noch aufrufen, aber nicht bei der Zuweisung, sondern danach:

Code: Alles auswählen

self.g = Checkbutton(labelfr, text="Großbuchstaben", variable=self.groß)
self.g.grid(row=3, column=0, padx=5, pady=5)
Es hilft aber alles nichts, - ohne zu verstehen, was du da tust, kannst du das nicht lösen. Und das Verstehen kann dir keiner abnehmen.
In specifications, Murphy's Law supersedes Ohm's.
tigerwood
User
Beiträge: 19
Registriert: Dienstag 30. Mai 2017, 21:55

Du meinst also alle Checkbuttons auf 2 Zeilen verteilen.
Ich bekomme dann nur wieder einen fehler.

Wenn ich das mit allen Zeilen mache wo ein grid() hinter ist die auf 2 verteilen kommt der gleiche fehler.

line 25, in print_value
self.Ausgabe.config(state='normal')
AttributeError: 'Application' object has no attribute 'Ausgabe'
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@tigerwood: Der Fehler ist in Zeile 58 in dem von dir geposteten Code.
In specifications, Murphy's Law supersedes Ohm's.
tigerwood
User
Beiträge: 19
Registriert: Dienstag 30. Mai 2017, 21:55

Die Zeile muss auch in 2 geteilt werden, nur wenn ich das mache habe ich doch den gleichen fehler
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@tigerwood: Du musst schon genau hinschauen. Ausgabe ist nicht dasselbe wie self.Ausgabe.

Willst du jetzt wirklich einen Fehler nach dem anderen hier schriftlich vorlesen und dein Programm zeilenweise von mir richten lassen? Was wirst du dann hinterher gelernt haben?
In specifications, Murphy's Law supersedes Ohm's.
tigerwood
User
Beiträge: 19
Registriert: Dienstag 30. Mai 2017, 21:55

Es läuft, habe den rest jetzt so gefunden.
Die letzten hinweise waren gut. Danke nochmal

Ein fehler habe ich doch noch den ich suchen muss. Die Scrolleiste unter der Ausgabe macht noch nicht ganz was die soll. Springt immer gleich nach rechts zurück.
Da fehlt noch irgendein befehl, es muss in diese richtung gehen
self.Ausgabescrollen["xscrollcommand"] = self.Ausgabescrollen.set
dieser will noch nicht ganz
Antworten