Seite 1 von 1
RadioBox aus Programm heraus ändern?
Verfasst: Donnerstag 24. September 2009, 20:40
von mathi
Hallo,
ich kann ja mit
Code: Alles auswählen
def EvtRadioBox(self,event=None):
self.RadioBoxState= event.GetInt()
den Event verarbeiten.
Jetzt speichere ich den status in eine Datei (pickle).
Wie kann ich beim einlesen der Datei den Status entspr. dem gespeicherten ändern?
im wx.TextCtrl gibt es SetValue()
im wx.RadioBox geht aber SetInt nicht, wie kann ich das schaffen.
2. Frage: gleiches möchte ich mit wx.Choice, wx.ComboBox machen, wie kann ich das schaffen?
Gruß Mathi
Re: RadioBox aus Programm heraus ändern?
Verfasst: Freitag 25. September 2009, 06:41
von Francesco
mathi hat geschrieben:Hallo,
ich kann ja mit
Code: Alles auswählen
def EvtRadioBox(self,event=None):
self.RadioBoxState= event.GetInt()
den Event verarbeiten.
Jetzt speichere ich den status in eine Datei (pickle).
Wie kann ich beim einlesen der Datei den Status entspr. dem gespeicherten ändern?
im wx.TextCtrl gibt es SetValue()
im wx.RadioBox geht aber SetInt nicht, wie kann ich das schaffen.
i
mit SetSelection(<index>); mit GetSelection bekommst du jederzeit den Status.
mathi hat geschrieben:
2. Frage: gleiches möchte ich mit wx.Choice, wx.ComboBox machen, wie kann ich das schaffen?
Gruß Mathi
Das gleiche wie bei der Radiobox (Get/SetSelection)
Verfasst: Freitag 25. September 2009, 07:41
von mathi
Vielen Dank, programmintern funtioniert es, aber optisch ändert sich nicht alles,
die Radiobox steuert das Hide von wx.TextCtrl's.
Muß ich den Frame aktualisieren, damit der Status richtig dargestellt wird??
Verfasst: Freitag 25. September 2009, 07:47
von Pekh
Nein, eigentlich nicht. Die MainLoop läuft aber?
EDIT: Ich glaube, du hast am Ende deines Handlers das "event.Skip()" vergessen. Damit sorgst du dafür, daß andere Teile deiner Oberfläche, die auch ein Interesse an diesem Event haben (z.B. weil sie Teile der Oberfläche aktualisieren sollen) auch eine Chance bekommen, auf das Ereignis zu reagieren. Sonst schluckst du das Ereignis einfach.
Verfasst: Freitag 25. September 2009, 08:01
von mathi
vielen Dank, das event.Skip() hatte ich vergessen, die Radiobox zeigt jetzt den richtigen State,
aber ein wx.TextCtrl welches in einem State 'Hide' ist, soll im anderen gezeigt werden. Dieses wird aber nicht gezeigt. Händisch gehts natürlich...
Das bedeutet doch, dass der event der RadioBox nicht ausgeführt wird??
Verfasst: Freitag 25. September 2009, 08:22
von jbs
Code: Alles auswählen
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
self.f2 = wx.Frame(self, title='2')
self.f2.Show()
rb = wx.RadioBox(
self, -1, "wx.RadioBox", choices=["on", "off"])
self.Bind(wx.EVT_RADIOBOX, self.EvtRadioBox, rb)
def EvtRadioBox(self, event):
if event.GetSelection() == 0:
self.f2.Show()
else:
self.f2.Show(False)
if __name__ == '__main__':
app = wx.PySimpleApp()
frame = MyFrame(None, -1, 'wx')
frame.Show()
app.MainLoop()
Also bei mir gehts. Auch ohne event.Skip.
Verfasst: Freitag 25. September 2009, 08:33
von mathi
Mag sein, dann hat event.Skip() keinen Einfluß
Aber mein letztes Problemchen ist, dass ich das TextCtrl nicht verstecken kann (wohlgemerkt über das Einlesen einer Datei (pickle).
Die Funktionalität funktioniert als Event mit der Maus wunderbar (mit und ohne event.Skip() )
Verfasst: Freitag 25. September 2009, 08:42
von jbs
Magst du uns den Code zeigen?
Verfasst: Freitag 25. September 2009, 08:56
von mathi
Verfasst: Freitag 25. September 2009, 08:59
von Pekh
Ein Blick in die
Dokumentation verrät, daß das Event nicht ausgelöst wird, wenn die Änderung über SetSelection() erfolgt. Dementsprechend mußt du deinen Code organisieren - also das Ereignis manuell auslösen, oder, besser noch: Den auszuführenden Code nicht in den Handler sondern in eine separate Methode packen, die dann sowohl vom Handler als auch von anderen Seiten aufgerufen werden kann.
Verfasst: Freitag 25. September 2009, 09:18
von mathi
Verfasst: Freitag 25. September 2009, 09:32
von Hyperion
Also bei mir funzt der Link nicht...
Verfasst: Freitag 25. September 2009, 09:49
von Pekh
Hyperion hat geschrieben:
Also bei mir funzt der Link nicht...
Das ist seltsam. Vorhin funktionierte er. Hat Mathi den Code gelöscht?
Verfasst: Freitag 25. September 2009, 10:33
von Hyperion
Pekh hat geschrieben:Hyperion hat geschrieben:
Also bei mir funzt der Link nicht...
Das ist seltsam. Vorhin funktionierte er. Hat Mathi den Code gelöscht?
Das wird es wohl sein...

Verfasst: Freitag 25. September 2009, 11:04
von Leonidas
Wusste gar nicht das das im Pastebin geht. Aber mathi sollte generell mal die Forenregeln lesen, ist schon der zweite Thread von ihm in dem ich das [gelöst] aus dem Threadtitel gelöscht habe.
Verfasst: Montag 28. September 2009, 10:20
von mathi
@Leonidas
ok, merke ich mir
Danke für den Hinweis.
bevor ich einen neuen Thread eröffne, habe ich nun doch noch ein anderes Problem, dass aber irgendwie mit dazugehört....
Ich weiß nicht warum, aber die Events für RadioBox, Checkbox und Combobox werden wohl nicht ausgelöst.
Komischerweise hat das in einem anderen Programm funktioniert??
http://paste.pocoo.org/show/wog9kV9Azv3lkHAkV4FL/
Den Code habe ich als funktionstüchtiges Programm ausgelagert.
Warum werden die Events nach einlesen der gespeicherten Daten nicht ausgelöst?
edit: wenn man auf den Button "Berechnung" drückt, wird im TextCtrl eine Kontrolle ausgegeben. Daran merkt man, dass die Events nicht ausgelöst werden bzw. die Änderungen beim Einlesen nur auf die GUI nicht aber im Programm geändert werden.