Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/12/2012, 07:57
tecafede
 
Fecha de Ingreso: noviembre-2012
Mensajes: 111
Antigüedad: 12 años
Puntos: 6
Duda como referenciar a un botón de la ToolBar

En este ejercicio que estoy haciendo:

http://www.filedropper.com/cambiarpanelesdesdetoolbar

(Archivo Python + 2 iconos)

Deseo simplemente que al hacer clic en una de las herramientas se muestre el panel correspondiente y se oculte el otro. Los paneles están vacíos, es solo para probar si los botones funcionan.

Curiosamente puedo lograr ese resultado si uso botones estándard DENTRO de los paneles, pero no logro hacerlo con los propios botones de la toolbar.

O sea con botones comunes lo resolvería con algo como

Código:
self.Bind(wx.EVT_BUTTON, self.OnClickHerramienta1, self.button_Herramienta1)
Deber ser algo de sintaxis con la forma de referenciar a los botones de la toolbar pero no encuentro solución y ya busqué en la web también y no encuentro ejemplos funcionando.

Es decir, si defino el botón de la Toolbar con:
Código:
self.frame_1_toolbar.AddLabelTool(1, "HERRAMIENTA1", wx.Bitmap("1.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, "Herramienta1", "Herramienta1")

No debería poder referenciarlo con??

Código:
self.Bind(wx.EVT_BUTTON, self.OnClickHerramienta1, self.button_Herramienta1)
La verdad que intento avanzar en Python pero la poca documentación de ejemplos sencillos funcionando hace bastante pesado el camino.

No encontré en la web un solo ejemplo de este tipo para poder basarme.


Código:
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
# generated by wxGlade 0.6.5 (standalone edition) on Wed Dec 19 10:19:46 2012

import wx

# begin wxGlade: extracode
# end wxGlade


class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        
        # Tool Bar
        self.frame_1_toolbar = wx.ToolBar(self, -1)
        self.SetToolBar(self.frame_1_toolbar)
        self.frame_1_toolbar.AddLabelTool(1, "HERRAMIENTA1", wx.Bitmap("1.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, "Herramienta1", "Herramienta1")
        self.frame_1_toolbar.AddLabelTool(2, "HERRAMIENTA2", wx.Bitmap("2.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, "Herramienta2", "Herramienta2")
        # Tool Bar end

        #Defino los dos paneles
        self.panel_1 = wx.Panel(self, -1)
        self.sizer_3_staticbox = wx.StaticBox(self.panel_1, -1, "PANEL DE LA HERRAMIENTA 1 - UNO")

        self.panel_2 = wx.Panel(self, -1)
        self.sizer_3_staticbox = wx.StaticBox(self.panel_1, -1, "PANEL DE LA HERRAMIENTA 2 - DOS")

        self.__set_properties()
        self.__do_layout()


        self.Bind(wx.EVT_BUTTON, self.OnClickHerramienta1, self.button_Herramienta1)
        self.Bind(wx.EVT_BUTTON, self.OnClickHerramienta2, self.button_Herramienta2)
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyFrame.__set_properties
        self.SetTitle("frame_1")
        self.frame_1_toolbar.SetToolBitmapSize((32, 32))
        self.frame_1_toolbar.Realize()
        self.panel_1.SetBackgroundColour(wx.Colour(216, 191, 216))
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        self.sizer_3_staticbox.Lower()
        sizer_3 = wx.StaticBoxSizer(self.sizer_3_staticbox, wx.HORIZONTAL)
        self.panel_1.SetSizer(sizer_3)
        sizer_1.Add(self.panel_1, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_1)
        sizer_1.Fit(self)
        self.Layout()
        # end wxGlade


    def OnClickHerramienta1(self, event): 
        self.panel_1.Show()
        self.panel_2.Hide()
         
        self.Layout()
        event.Skip()


    def OnClickHerramienta2(self, event): 
        self.panel_1.Hide()
        self.panel_2.Show()
         
        self.Layout()
        event.Skip()



# end of class MyFrame
if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    frame_1 = MyFrame(None, -1, "")
    app.SetTopWindow(frame_1)
    frame_1.Show()
    app.MainLoop()