ListCrtl - ItemEdit abfangen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

Montag 2. Mai 2005, 12:49

Hallo,

Ich habe ein wxListCtrl in dem der User das Item editieren kann (mit wxLC_EDIT_LABELS erzeugt).

Wenn nun der User ein Item editiert und die Eingabe einer von in einem Dictionary definierten Abkürzung entspricht, so soll diese Abkürzung zum Orginal erweitert werden.

Beispiel:
Der User gibt bei der Editierung des Items die Abkürung "usw." ein, dann soll diese intern zu "und so weiter" erweitert werden. Das Item würde also nach der Editierung den Namen "und so weiter" besitzen.

Wie kann ich das bewerkstelligen?

Wenn ich während der Editierung eines Items, dieses mit "SetItemText" überschreibe, passiert nichts.

Vielleicht hat jemand eine Idee?

Danke!
Gruß, Harry
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Montag 2. Mai 2005, 14:54

HarryH hat geschrieben:Hallo,

Ich habe ein wxListCtrl in dem der User das Item editieren kann (mit wxLC_EDIT_LABELS erzeugt).

Wenn nun der User ein Item editiert und die Eingabe einer von in einem Dictionary definierten Abkürzung entspricht, so soll diese Abkürzung zum Orginal erweitert werden.

Beispiel:
Der User gibt bei der Editierung des Items die Abkürung "usw." ein, dann soll diese intern zu "und so weiter" erweitert werden. Das Item würde also nach der Editierung den Namen "und so weiter" besitzen.

Wie kann ich das bewerkstelligen?

Wenn ich während der Editierung eines Items, dieses mit "SetItemText" überschreibe, passiert nichts.

Vielleicht hat jemand eine Idee?

Danke!
Wenn ich Dich richtig verstehe.
Du willst usw. eintippen und gleich nach dem lezten Zeichen "." sollte
der Itemtext auf "und so weiter" umgewandelt werden?
Das wird, glaube ich, nicht (so leicht) gehen.

Was ist, wenn Du EVT_LIST_END_LABEL_EDIT Event bindest?
und hier dann SetItemState oder wx.CallAfter (SetItemState, ..)
aufrufst?
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

Dienstag 3. Mai 2005, 06:54

Hallo Francesco,

Was ist, wenn Du EVT_LIST_END_LABEL_EDIT Event bindest?
Das meinte ich auch so. Erst nach Bestätigung der Editierung soll das Kürzel durch den Orginalnamen ersetzt werden.

Aber wie meinst du das mit SetItemState und wx.CallAfter?
Ich habe folgendes innerhalb der von EVT_LIST_END_LABEL_EDIT aufgerufenene Funktion versucht:

Code: Alles auswählen

wx.CallAfter(self.list.SetItemText(item, text))
Hat aber nicht funktioniert. Folgender Fehler trat auf:

Code: Alles auswählen

Traceback (most recent call last):
  File "D:\Python\Lib\site-packages\wx-2.6-msw-ansi\wx\_core.py", line 11917, in <lambda>
    lambda event: event.callable(*event.args, **event.kw) )
TypeError: 'NoneType' object is not callable
Womöglich geht es ja anders?
Gruß, Harry
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Dienstag 3. Mai 2005, 08:24

HarryH hat geschrieben:Hallo Francesco,

Was ist, wenn Du EVT_LIST_END_LABEL_EDIT Event bindest?
Das meinte ich auch so. Erst nach Bestätigung der Editierung soll das Kürzel durch den Orginalnamen ersetzt werden.

Aber wie meinst du das mit SetItemState und wx.CallAfter?
Ich habe folgendes innerhalb der von EVT_LIST_END_LABEL_EDIT aufgerufenene Funktion versucht:

Code: Alles auswählen

wx.CallAfter(self.list.SetItemText(item, text))
Hat aber nicht funktioniert. Folgender Fehler trat auf:

Code: Alles auswählen

Traceback (most recent call last):
  File "D:\Python\Lib\site-packages\wx-2.6-msw-ansi\wx\_core.py", line 11917, in <lambda>
    lambda event: event.callable(*event.args, **event.kw) )
TypeError: 'NoneType' object is not callable
Womöglich geht es ja anders?
Hallo Harry,

leider bin ich auch kein Experte, das wäre eine Frage für Robin
Dunn oder andere Spezialisten in der wxpython-user mailing list.
Kannst Du auch über gmane direkt mit einem Newsreader abbonieren.
(news.gmane.org) gmane.comp.python.wxpython.

Für wx.CallAfter gilt: (funktion, para1, para2, ...)
also
wx.CallAfter (self.list.SetItemText, item, text)
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

Dienstag 3. Mai 2005, 08:39

Hallo Francesco,

Juhu! Es geht. :D

Ich hatte wx.CallAfter() falsch aufgerufen.
Mit

Code: Alles auswählen

wx.CallAfter(self.list.SetItemText, item, text)
funktioniert es.

Vielen Dank!
Gruß, Harry
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Dienstag 3. Mai 2005, 09:38

HarryH hat geschrieben:Hallo Francesco,

Juhu! Es geht. :D

Ich hatte wx.CallAfter() falsch aufgerufen.
Mit

Code: Alles auswählen

wx.CallAfter(self.list.SetItemText, item, text)
funktioniert es.

Vielen Dank!
Toll, freut mich :)
Antworten