RadioBox aus Programm heraus ändern?

Plattformunabhängige GUIs mit wxWidgets.
Antworten
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

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
Zuletzt geändert von mathi am Freitag 25. September 2009, 09:18, insgesamt 1-mal geändert.
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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)
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

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??
Zuletzt geändert von mathi am Freitag 25. September 2009, 07:57, insgesamt 1-mal geändert.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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.
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

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??
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

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.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

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() )
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Magst du uns den Code zeigen?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

edit:
http://paste.pocoo.org/show/XTygJ8jeKfVZ8VdXMfM5/

hat geklappt, Site mag Opera nicht...
Zuletzt geändert von mathi am Freitag 25. September 2009, 09:19, insgesamt 1-mal geändert.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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.
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

:D :D :D :D

Danke allerseits für die Hilfe

Gruß Mathi
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

mathi hat geschrieben:edit:
http://paste.pocoo.org/show/XTygJ8jeKfVZ8VdXMfM5/

hat geklappt, Site mag Opera nicht...
Also bei mir funzt der Link nicht...
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Hyperion hat geschrieben:
mathi hat geschrieben:edit:
http://paste.pocoo.org/show/XTygJ8jeKfVZ8VdXMfM5/

hat geklappt, Site mag Opera nicht...
Also bei mir funzt der Link nicht...
Das ist seltsam. Vorhin funktionierte er. Hat Mathi den Code gelöscht?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Pekh hat geschrieben:
Hyperion hat geschrieben:
mathi hat geschrieben:edit:
http://paste.pocoo.org/show/XTygJ8jeKfVZ8VdXMfM5/

hat geklappt, Site mag Opera nicht...
Also bei mir funzt der Link nicht...
Das ist seltsam. Vorhin funktionierte er. Hat Mathi den Code gelöscht?
Das wird es wohl sein... :?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

@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.
Antworten