event problem

Plattformunabhängige GUIs mit wxWidgets.
Antworten
rkruggel
User
Beiträge: 21
Registriert: Mittwoch 9. März 2005, 11:40
Wohnort: Altena, Westf.
Kontaktdaten:

Hallo,

Ein kleines Problem mit events und datenaustausch.

In Prog_A wird eine instanz von Prog_B erzeugt.
In Prog_B werden Daten in einem ListCtrl angezeigt. Der event EVT_LIST_ITEM_SELECTED mit der funktion listctrl.GetItem(idx,0).GetText() liefert mir dann brav den ersten Eintrag des selectierten Items.

So weit, so gut. Nur kann ich die Daten nicht in Prog_B gebrauchen. Sie müssen in Prog_A weiterverarbeitet werden.

Wie sage ich jetzt Prog_A das in Prog_B ein event ausgelöst wurde. Ich muss praktisch in Prog_B einen event generieren den ich in Prog_A abfangen kann. (Denk ich mir mal so) Ich weis nur absolut nicht wie? Oder gibt es einen ganz anderen Weg?
cu
Roland
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

klingt etwas wirr. Einfacher wäre es, wenn Du nicht versuchen würdest so abstrakt zu schreiben, nicht wahr? Code könnte, wie immer, helfen.

Aber zum Problem: Es klingt ein bißchen so wie Dein letztes Problem. Du erzeugst in Prog_A eine Instanz von Prog_B. Also ist Prog_A "parent" von Prog_B. Wenn man Dir nun einen guten Rat geben will, wäre es von Vorteil zu wissen, was genau Prog_B eigentlich ist. Aber nehmen wir einmal an es sei ein SingleChoiceDialog. Dann geht es z. B. so in Prog_A:

Code: Alles auswählen

datasetsnames = [x.get_attribute('name') for x in self.active_datasets]
datasetdialog = wx.SingleChoiceDialog(self, 'Choose one data set:', '', datasetsnames, wx.CHOICEDLG_STYLE)
if datasetdialog.ShowModal() == wx.ID_OK:
    selection = datasetdialog.GetStringSelection()
    index = datasetsnames.index(selection)
    self.selected = self.active_datasets[index]
else: return
Wenn es sich um einen komplexeren Dialog handelt, KÖNNTE die Lösung analog zu diesem einfachen Beispiel funktionieren: Dein Prog_B braucht eine Methode auf die Prog_A zugreifen kann, um sich die Daten zu holen.
Wenn Dir diese Info nicht reicht, werde doch mal konkret und zeige etwas Code oder / und beschreibe weniger abstrakt, was Du eigentlich erreichen willst.

Gruß,
Christian
Antworten