Seite 1 von 1

Sein oder Nicht-Sein einer Member Variable einer Classses

Verfasst: Mittwoch 29. April 2020, 17:08
von Mungo1981
Liebe Community,
Ich stehe mal wieder auf dem Schlauch.

Ich habe eine Classe von einem TKInter abgeleitet:

Code: Alles auswählen

class Example(tk.Frame ): 
In dieser Erzeuge ich eine Tabelle aus einer Matrix von Entry-Widgets

Code: Alles auswählen

 def creatingDerivativTables(self):
        self.pbt2 = tk.PanedWindow(self.m1)
        pbtA = tk.PanedWindow(self.pbt2)
        pbtB = tk.PanedWindow(self.pbt2)
        pbtRes = tk.PanedWindow(self.pbt2)
        
        self.derivatTableA = Tables(pbtA) 
        self.derivatTableB = Tables(pbtB)
        self.derivatTableRes = Tables(pbtRes)
        
        self.pbt2.add(pbtA)
        self.pbt2.add(pbtB)
        self.pbt2.add(pbtRes)
    
        self.m1.add(self.pbt2)


Und nun kommt das Problem:
Ich müsste self.derivativeTableA mit self.derivativeTableB vertauschen - Werte mäßig.

Code: Alles auswählen

 def doInterchange(self, mode):
        if mode == "AB":
            self.derivatTableA.interchange(self.derivatTableB)
leider bekomme ich immer gemeldet, dass es keine self.derivativeTableA
gäbe.

Kann mir irgendjemand vielleicht kurz auf die Sprünge helfen :shock: :? :shock:

Re: Sein oder Nicht-Sein einer Member Variable einer Classses

Verfasst: Mittwoch 29. April 2020, 17:36
von __deets__
Die Fehlermeldung ist ja recht eindeutig. Da du nicht den gesamten Code zeigst, kann man nur raten. Wenn creatingDerivativTables gelaufen ist, dann *muss* self.derivatTableA existieren. Ausser du loeschst das irgendwie. Also ist creatingDerivativTables nicht gelaufen zu dem Zeitpuntk, wo da was ausgetauscht werden soll.

Re: Sein oder Nicht-Sein einer Member Variable einer Classses

Verfasst: Mittwoch 29. April 2020, 17:50
von Mungo1981
Ok, du hast ja vollkommen Recht.
Ich bin jetzt über 2 Jahre raus aus Python
Und versuche mich seit 3 Tagen wieder drin.
Also erst einmal Entschuldigung:

Das Problem liegt an einer sehr Merkwürdigen Stelle.

Code: Alles auswählen

moveTableMenu.add_command(label="Interchange Table A with B", command=self.doInterchange("AB"))
An dieser Stelle - so dachte ich - soll vereinbart werden dass ein Funktionsaufruf von "self.dointerchange" mit dem Parameter "AB" vereinbart wird.
Nur Python denkt es soll hier tatsächlich die Funktion "self.doInterchange("AB")" ausgeführt werden - was nicht meinen Erwartungen entspricht.

Habt ihr vielleicht eine Idee ob es irgendwie möglich ist das richtige zu erreichen. Also:
  • Eine Vereinbarung dass die Funktion self.doInterchange mit dem Parameter "AB" aufgerufen wird
Ein schon etwas klügerer

Mungo1981

Re: Sein oder Nicht-Sein einer Member Variable einer Classses

Verfasst: Mittwoch 29. April 2020, 18:39
von Sirius3
Wie __deets__ schon geschrieben hat, kann man ohne den kompletten Code nichts sagen. Das Stückwerk und Deine Erklärungsversuche helfen da nur bedingt.
Auch der komplette Traceback ist wichtig, und nicht Deine gekürzte Version.

Re: Sein oder Nicht-Sein einer Member Variable einer Classses

Verfasst: Mittwoch 29. April 2020, 18:40
von __deets__
Das geht wahlweise mit einem lambda oder functools.partial. Wird hier permanent besprochen, einfach mal ein bisschen suchen.

Re: Sein oder Nicht-Sein einer Member Variable einer Classses

Verfasst: Mittwoch 29. April 2020, 20:18
von Mungo1981
Entschuldigung aber wäre es da nicht einfacher, für jede Menu Option:

viewtopic.php?f=18&t=48429

Eine einfache Funktion zu schreiben
wären in meine Falle nur 6 zusätzliche Funktionen.

Ein ermunterter

Mungo1981

Re: Sein oder Nicht-Sein einer Member Variable einer Classses

Verfasst: Mittwoch 29. April 2020, 20:29
von __blackjack__
@Mungo1981: Nein‽

Re: Sein oder Nicht-Sein einer Member Variable einer Classses

Verfasst: Mittwoch 29. April 2020, 20:32
von Mungo1981
Ok,
Wenn es einfacher ist eine Lambda zu schreiben ...
... dann her mit der Anleitung.

Re: Sein oder Nicht-Sein einer Member Variable einer Classses

Verfasst: Mittwoch 29. April 2020, 20:38
von Mungo1981
Wäre es für obige Funktion einfach:

Code: Alles auswählen

moveTableMenu.add_command(label="Interchange Table A with B", command=map(lambda x:  self.Interchange(x),  "AB"))
Ein

Mungo1981

der es mal wagen möchte

Re: Sein oder Nicht-Sein einer Member Variable einer Classses

Verfasst: Mittwoch 29. April 2020, 20:42
von Mungo1981
Hab gerade folgende Stelle gefunden:

viewtopic.php?f=18&t=43322&p=329669&hil ... ue#p329669

Da geht es praktisch genau um mein Problem .... nur bin ich ein blutiger Anfänger, noch dazu ein Künstler noch dazu seit 2 Jahren aus dem Thema und versuche seit 3 Tagen meine Probleme wieder mit Python zu lösen.

Re: Sein oder Nicht-Sein einer Member Variable einer Classses

Verfasst: Mittwoch 29. April 2020, 20:54
von Mungo1981
Hallo hab jetzt folgendes:
moveTableMenu.add_command(label="Interchange Table A with B", command=map(lambda x: self.doInterchange(x), "AB"))

Es wird sxchon einmal nicht mehr Ausgeführt - wenn es übergeben wird ...
.... nur leider wird es auch nicht mehr auf Kommando ausgeführt.

Re: Sein oder Nicht-Sein einer Member Variable einer Classses

Verfasst: Mittwoch 29. April 2020, 21:10
von __deets__
Woher hast du denn das map? Das hat hier nichts verloren.

Ah. Sehe gerade den Post davor. Nicht alles, was irgendwie mit lambda zu tun hat, ist anwendbar. Der Kontext hier ist tkinter, und da findest du auch speziell Beispiele für.

Re: Sein oder Nicht-Sein einer Member Variable einer Classses

Verfasst: Mittwoch 29. April 2020, 21:11
von Mungo1981
Ok,
jetzt hab ichs

Code: Alles auswählen

l moveTableMenu.add_command(label="Interchange Table A with B", command= lambda : self.doInterchange("AB"))
Ich glaube ich bin gar nicht so Dumm

:D :D :D :D

Re: Sein oder Nicht-Sein einer Member Variable einer Classses

Verfasst: Mittwoch 29. April 2020, 23:29
von snafu
Mungo1981 hat geschrieben: Mittwoch 29. April 2020, 21:11 Ich glaube ich bin gar nicht so Dumm

:D :D :D :D
Dann glaub du mal... :)