Datenaustausch zwischen zwei Modulen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

Hallo,

Momentan komme ich überhaupt nicht weiter:
Ich habe zwei Klasse geschrieben, die ich jetzt in ein Programm importiere.
Nun soll eine Funktion der zweiten Klasse ausgeführt werden, sobald sich ein Rückgabewert der ersten Klasse ändert.

Zum Programm:
Die erste Klasse dient zum Zeichnen auf einem Canvas. (unter Tkinter)
Die zweite Klasse enthält eine Listbox, in die Rückgabewerte aus der ersten Klasse eingefügt werden sollen.
Im Prinzip suche ich lediglich eine Möglichkeit eine Funktion aufzurufen, sobald sich etwas in der ersten Klasse ändert.

Ich hoffe das war verständlich und ihr könnt mir helfen

Wie gesagt, ich finde keinen Ansatz dafür.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dann zeig doch mal den Code. Von der Beschreibung laesst sich leider nicht viel erkennen.

Aber um das mal generisch anzugehen, kannst du das eine Exemplar ja mit dem anderen bekannt machen und dein Problem damit verwalten.
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

Soweit der Code:
Die Funktionen habe ich kommentiert

Code: Alles auswählen

import Tkinter as tk
from tk_c_koordinatenlistbox import *
from tk_c_canvaskoordinatensystem import *

win=tk.Tk()

canv=tk.Canvas(win, width=500, height=500, bg='white')
canv.pack(side='left', padx=10)

koordinatensystem=Koordinatensystem(canv, 500, 500)
print koordinatensystem.get('punkte') #mit dieser methode werden alle punkte gelistet
# ausgabe: []

rahmen=tk.LabelFrame(win, text='Punkte')
rahmen.pack(side='right')

coordslistbox=KoordinatenListbox(rahmen)
Jetzt will ich folgendes:
Sobald sich koordinatensystem.get('punkte') ändert soll

Code: Alles auswählen

for c in koordinatensystem.get('punkte'): # für punkt in punkte des koordinatensystems:
     coordslistbox.add_point(c)               # punkt in die listbox einfügen
ausgeführt werden.
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

Ich melde mich noch einmal zu Wort:

Gibt es dafür etwas wie die ´´trace``-Methode?
(Bsp.: http://www.python-forum.de/topic-19104. ... ight=trace
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

Vorweg: Das ganze betrifft jetzt eher Tkinter


OK,

ich habe das ganze jetzt mit der .after(ms, funcid) -Methode gelöst.

Kann mir jemand sagen, ob das sinnvoll ist; kann man so weiterarbeiten?
(Ich würde ungern am Ende feststellen, dass es so nicht geht, wenn es mir auch jetzt schon jemand sagen kann)

und gleich noch eine Frage:
Wenn ich die .after - Methode innerhalb einer Klasse habe, die ich importiere,
wie verhält sich das ganze im Hauptprogramm??
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Die after-Methode hört sich jetzt für mich etwas überflüssig an. Du hast doch sicher irgendwo eine Methode in der ersten Klasse, in der Punkt eingefügt/gelöscht werden? Dann weißt du ja genau, wann diese Situation eintritt und kannst dann in der zweiten Klasse entsprechend Methoden aufrufen.

Code: Alles auswählen

class Spam(object):
    def __init__(self, eggs):
        self.points = []
        self.eggs = eggs
    
    def add(self, element):
        self.points.append(element)
        self.eggs.update(element, self.points)

class Eggs(object):
    def update(self, new, points):
        print new, "inserted into", points

eggs = Eggs()
spam = Spam(eggs)

spam.add(1)
spam.add(2)
Das Leben ist wie ein Tennisball.
Antworten