wx.lib.platebtn in XRC?

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Nebelhom
User
Beiträge: 155
Registriert: Mittwoch 19. Mai 2010, 01:31

Hi,

hat einer von euch eine Ahnung, ob und wie man einen Platebutton (wx.lib.platebtn.PlateButton) in eine XRC datei einfügt?

Bis jetzt habe ich nur widgets nehmen können, die es auch in wxWidgets gibt und ich denke, der PlateButton ist "custom-made".

Ich habe es dann auch mal mit XmlResourceHandler versucht, aber da bin ich schon an der Demo gescheitert, weil ich aus der leider nicht wirklich schlau werde :(.

Jedwede Hilfe oder Tipps sind willkommen. Danke euch allen schonmal.

Nebelhom
Nebelhom
User
Beiträge: 155
Registriert: Mittwoch 19. Mai 2010, 01:31

Ok, der vollstaendigkeithalber werde ich hier mal meine Loesung praesentieren, falls sich jemand etwas aehnliches mal gefragt hat.

Einen PlateButton in der XRC Datei selber zu haben geht wohl nicht, man kann aber einen Platzhalter einfuegen und dann mittels XmlResource.AttackUnknownControl das gewuenschte Widget im Nachhinein einfuegen. Als Beispiel, das was ich gemacht habe:

In der XRC Datei habe ich ein objekt mit der class unknown eingefuegt:

Code: Alles auswählen

<object class="unknown" name="A_Name">
    <variables</variables>
</object>
in meinem Frame habe ich dann das widget, in meinem Fall den PlateButton mit Bild und Toggle eingefuegt und an events gebunden. Im Uebrigen habe ich das machen wollen, weil wxpython keinen ToggleState bei Bitmapbuttons erlaubt.

Code: Alles auswählen

class MyFrame(wx.Frame):
    def __init__(self, parent):
        self.res = xrc.XmlResource("my_xrc_file.xrc")
        self.frame = self.res.LoadFrame("MyFrame")

        imageFile = "/a/path/to/your/file"
        png = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()

        self.MyBtn = wx.lib.platebtn.PlateButton(self.frame, bmp=png,
                    style=platebtn.PB_STYLE_TOGGLE|platebtn.PB_STYLE_DEFAULT)
        self.PlateBtn = parent.res.AttachUnknownControl("MyBtn",
                                                self.MyBtn, self.frame)
        
        
        self.MyBtn.Bind(wx.EVT_TOGGLEBUTTON, self.on_toggle)
Ich hoffe, das leuchtet ein wenig ein. Falls jemand Verbesserung hat, immer her damit. Mein PEP 8 Naming chaos ist mir im Uebrigen bewusst, nur leider verhasple ich mich immer wieder auf Grund der Diskrepanz von wxpython naming mit der von Python selbst (also PEP 8). Also bitte nur drauf hinweisen und nicht niedermachen.
Antworten