Probleme mit dem Erstellen von Radioelementen im Menu

Plattformunabhängige GUIs mit wxWidgets.
Antworten
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

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.
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

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
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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?
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

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
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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???
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

[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
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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.
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

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
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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.
Zuletzt geändert von Francesco am Dienstag 7. Februar 2006, 11:10, insgesamt 2-mal geändert.
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

Danke nochmal, dann werd ich es so machen müssen ....

mfg cime
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

So, jetzt glaube ich, dass es funktioniert.

(Bitte in der mailing liste nachschauen).
Es wird auch der Status des letzten aktiven Radiomenus
gespeichert.
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

thx

mfg cim
Antworten