Seite 1 von 1

Probleme mit dem Erstellen von Radioelementen im Menu

Verfasst: Mittwoch 25. Januar 2006, 16:31
von cime
hallo ....

ich hab mal wieder ein problem und komme inefach nicht weiter:

ich erstelle ein ganz normales Menu:

Code: Alles auswählen

menu=wx.Menu()
menu.Append(1999,dic['none'],'',wx.ITEM_RADIO)
später möchte ich dann dynamisch noch zusätzliche Radioelemente hinzufügen und das klappt auch, wenn ich allerdings dann auf diese draufklicke, wird zwar die zugehörige Funktion ausgeführt, aber dieser kleine Punkt bleibt nicht dort... ich versteh nicht wieso ... kann mir irgendjemand helfen????

Code: Alles auswählen

mb=self.GetMenuBar()
menu = mb.FindItemById(1999).GetMenu()
menu.Append(2000+self.nr_poly,poly.name,'')
self.Bind(wx.EVT_MENU, self.choose_way, id=(2000+self.nr_poly))
self.nr_poly+=1
mfg cime

BTW: wie kann man eigentlich zwischen zwei Auswahlen unterscheiden (es kann ja sein, jemand möchte das in einem Menu zwei unterschiedliche Dinge ausgewählt werden sollen.

Verfasst: Mittwoch 25. Januar 2006, 22:26
von cime
okay, prob gelöst, habe einfach vergessen, dem zu sagen dass es als wx.ITEM_RADIO eingefügt werden soll.

Aber jetzt stehe ich vor dem Problem, dass ich schon btw angesprochen habe .... jetzt macht er nämlich in einem Menu zwei Auswahlen (1.: nur die oberste ... und 2.: der Rest)

wie kann ich wxPython nun sagen, dass er es als eine Auswahl benutzen soll?????

Danke schon einmal im voraus....

mfg cime

Verfasst: Montag 30. Januar 2006, 14:22
von Francesco
cime hat geschrieben:okay, prob gelöst, habe einfach vergessen, dem zu sagen dass es als wx.ITEM_RADIO eingefügt werden soll.

Aber jetzt stehe ich vor dem Problem, dass ich schon btw angesprochen habe .... jetzt macht er nämlich in einem Menu zwei Auswahlen (1.: nur die oberste ... und 2.: der Rest)

wie kann ich wxPython nun sagen, dass er es als eine Auswahl benutzen soll?????

Danke schon einmal im voraus....

mfg cime
Verstehe ich ich nicht ganz.

wxPython Demo => Menus => dann shells menu
Hier sind 3 Radio Button Menus, meinst du das?

Verfasst: Mittwoch 1. Februar 2006, 11:09
von cime
nein, ich meine, dass ich erst in einem menu nur einen radiobutton hab. Später kann der Nutzer dann noch andere Elemente hinzu fügen, das Problenm ist, dass das erste Menuelement eine eigene Auswahl ist (--> man kann natürlich nicht wirklich etwas auswählen, da es halt nur ein Stichpunkt ist) und die restlichen auch eine eigene Auswahl .... man hat also zweimal die Möglichkeit uszuwählen ... das möchte ich aber nicht, ich möchte, dass man nur eine Auswahl hat ....

PS: das in der wxdemo hab ich schon gesehen, aber da ist das auch nicht erklärt ....

mfg cime

Verfasst: Mittwoch 1. Februar 2006, 17:00
von Francesco
Verstehe ich immer noch nicht ganz.
Kannst du das ganze auf ein kleines Sample reduzieren
(das wäre das beste),
oder sowas wie einen Screenshot erstellen?

Meinst du ein Submenu?

Menu
1. MenuEntry => Submenu
2. MenuEntry ist ItemRadio
3. user kann ein neues Item Radio hinzufügen ????

So in der Art???

Verfasst: Samstag 4. Februar 2006, 16:57
von cime
[img]"http://cime.ci.ohost.de/menprob.bmp"[/img]
--> könnte mir mal bitte jemand von den Administratoren helfen, dass bild ordentlich einzufügen, ich weiß namlich nicht, wie ich das mache soll, danke

solange diesen link hier: BILD


in diesem menu, siehst du zwei punkte .... d.h. man kann sich in zwei Auswahlen "entscheiden":

1. zwischen "Keiner" und nichts weiter ....
2. zwischen "polygon20" bis "polygon3"


dieses menu wurde erstellt, wie ganz oben erklärt .... nur möchte ich, dass das aber nur eine Auswahl ist (also zwischen "Keiner", "polygon20", .... , "polygon3") und möchte gerne wissen, wie das geht ..... danke nochmal, dass du dir so einen kopf darum machst ...

mfg cime

Verfasst: Montag 6. Februar 2006, 11:03
von Francesco
Ich glaube, jetzt habe ich es verstanden.

(Vielleicht wxPython Problem, vielleicht auch nicht)

Wenn ich es so starte, bekomme ich das gleiche wie du:

Code: Alles auswählen

#import wxversion
#wxversion.select("2.6-msw-ansi")
import wx

#not working on:
#wxPython 2.6.2.1 and wxPython 2.6.0
#on Windows XP
#After pressing AppendMenu, two(!) radio items are checked
class MyFrame(wx.Frame):

    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title)

        self.menuBar = wx.MenuBar()
        self.menu = wx.Menu()
        self.menu.Append(2000,"Radio1",'',wx.ITEM_RADIO) 
        self.menu.Append(2001,"Radio2",'',wx.ITEM_RADIO) 
        self.menuBar.Append (self.menu, "Menu")
        self.SetMenuBar(self.menuBar)
        button = wx.Button(self, label = "Append Menu")
        button.Bind(wx.EVT_BUTTON, self.AppendMenuDynamic)

    def AppendMenuDynamic(self, evt):
        self.menu.Append(2002,"Radio3",'',wx.ITEM_RADIO) 
        self.menu.Append(2003,"Radio4",'',wx.ITEM_RADIO) 

        #doesn't work either
        #self.DoMenuUpdates()
        #self.menu.Check(2002, False)
        #self.menu.AppendRadioItem (2003,"Radio4")

app = wx.App(0)
win = MyFrame(None, title="Radio Menus, wxPy: " + wx.VERSION_STRING)
win.Show()
app.MainLoop()
Setze ich die zwei zeilen direkt nach dem ersten Append, scheint es zu funktionieren:

(Die menus werden zuerst angelegt, und dann erst die Menubar gesetzt)

Code: Alles auswählen

        menu.Append(2000,"Radio1",'',wx.ITEM_RADIO) 
        menu.Append(2001,"Radio2",'',wx.ITEM_RADIO) 
        menu.Append(2002,"Radio3",'',wx.ITEM_RADIO) 
        menuBar.Append (menu, "Menu")
        self.SetMenuBar(menuBar)

Da du diese aber dynamisch anlegen willst, muesste es wie im oberen
kurzen Sample gezeigt, funktionieren.

Entweder habe ich etwas nicht ganz verstanden, oder
es handelt sich um einen wxPython Bug.
Ich frage einmal in der Mailing Liste.

Verfasst: Montag 6. Februar 2006, 20:56
von cime
ja, exakt das ist mein prob ... ich habe auch schon überlegt, einfach jedes Mal das komplette wxMenu neu zu erstellen, aber irgendwie sit das viel zu umständlich und auch keine schöne Implementierung ....

mfg cime

Verfasst: Dienstag 7. Februar 2006, 09:38
von Francesco
cime hat geschrieben:ja, exakt das ist mein prob ... ich habe auch schon überlegt, einfach jedes Mal das komplette wxMenu neu zu erstellen, aber irgendwie sit das viel zu umständlich und auch keine schöne Implementierung ....

mfg cime
Hallo Cime,
anscheinend geht es momentan nicht anders.

http://aspn.activestate.com/ASPN/Mail/M ... rs/3009384

Code: Alles auswählen

     def AppendMenuDynamic(self, evt):
         items = self.menu.GetMenuItems()
         for item in items:
             self.menu.DestroyItem(item)

         self.menu.Append(2000,"Radio1",'',wx.ITEM_RADIO)
         self.menu.Append(2001,"Radio2",'',wx.ITEM_RADIO)
         self.menu.Append(2002,"Radio3",'',wx.ITEM_RADIO)
         self.menu.Append(2003,"Radio4",'',wx.ITEM_RADIO)
Ich werde einen bug report erstellen.

Verfasst: Dienstag 7. Februar 2006, 10:21
von cime
Danke nochmal, dann werd ich es so machen müssen ....

mfg cime

Verfasst: Dienstag 7. Februar 2006, 11:12
von Francesco
cime hat geschrieben:Danke nochmal, dann werd ich es so machen müssen ....

mfg cime
Es gibt immer noch Probleme mit diesem Ansatz:

http://lists.wxwidgets.org/cgi-bin/ezml ... epcedjiolp

Verfasst: Dienstag 7. Februar 2006, 18:34
von Francesco
So, jetzt glaube ich, dass es funktioniert.

(Bitte in der mailing liste nachschauen).
Es wird auch der Status des letzten aktiven Radiomenus
gespeichert.

Verfasst: Montag 13. Februar 2006, 17:43
von cime
thx

mfg cim