Me gustaría hacer un botón personalizado en wxPython. ¿Dónde debería comenzar, cómo debería hacerlo?¿Cómo hacer botones personalizados en wx?
5
A
Respuesta
8
Aquí es un esqueleto que se puede utilizar para dibujar el botón totalmente a medida, depende de su imaginación cómo se ve o se comporta
class MyButton(wx.PyControl):
def __init__(self, parent, id, bmp, text, **kwargs):
wx.PyControl.__init__(self,parent, id, **kwargs)
self.Bind(wx.EVT_LEFT_DOWN, self._onMouseDown)
self.Bind(wx.EVT_LEFT_UP, self._onMouseUp)
self.Bind(wx.EVT_LEAVE_WINDOW, self._onMouseLeave)
self.Bind(wx.EVT_ENTER_WINDOW, self._onMouseEnter)
self.Bind(wx.EVT_ERASE_BACKGROUND,self._onEraseBackground)
self.Bind(wx.EVT_PAINT,self._onPaint)
self._mouseIn = self._mouseDown = False
def _onMouseEnter(self, event):
self._mouseIn = True
def _onMouseLeave(self, event):
self._mouseIn = False
def _onMouseDown(self, event):
self._mouseDown = True
def _onMouseUp(self, event):
self._mouseDown = False
self.sendButtonEvent()
def sendButtonEvent(self):
event = wx.CommandEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED, self.GetId())
event.SetInt(0)
event.SetEventObject(self)
self.GetEventHandler().ProcessEvent(event)
def _onEraseBackground(self,event):
# reduce flicker
pass
def _onPaint(self, event):
dc = wx.BufferedPaintDC(self)
dc.SetFont(self.GetFont())
dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
dc.Clear()
# draw whatever you want to draw
# draw glossy bitmaps e.g. dc.DrawBitmap
if self._mouseIn:
pass# on mouserover may be draw different bitmap
if self._mouseDown:
pass # draw different image text
3
Puede extender la clase botón por defecto, así por ejemplo:
class RedButton(wx.Button):
def __init__(self, *a, **k):
wx.Button.__init__(self, *a, **k)
self.SetBackgroundColour('RED')
# more customization here
Cada vez que se pone un RedButton
en su diseño, debe aparecer de color rojo (no lo he probado sin embargo).
2
Pruebe usar Generic Button o Bitmap Button.
5
Cuando quería aprender a hacer widgets personalizados (botones incluidos) que hace referencia Andrea Gavana's page (ejemplo de trabajo completo allí) en el platebutton wxPyWiki y Cody de Precord (la fuente está en wx.lib.platebtn, también here en SVN) . Mire ambos y debería poder construir la mayoría de los widgets personalizados que desee.
Cuestiones relacionadas
- 1. ¿Cómo hacer botones personalizados en iOS?
- 2. Botones personalizados en Silverlight
- 3. botones de ficha personalizados
- 4. ¿Botones sociales personalizados con contadores?
- 5. Cómo crear botones personalizados para compartir
- 6. Cómo hacer botones redondos
- 7. Python WX - Devolver entrada de usuario desde wx Dialog
- 8. UITableView Modo de edición Mostrar botones personalizados
- 9. ¿Cómo hacer botones en python/pygame?
- 10. Crear botones personalizados con icono y texto
- 11. ¿Cómo hacer objetos personalizados en Javascript?
- 12. Agregar botones personalizados al editor de WMD
- 13. Erlang Wx: cómo agregar nuevos widgets
- 14. Dibujar botones personalizados en Windows Vista/7 Aero Titlebar
- 15. Botones de zoom personalizados Google Map API V3
- 16. ¿Cómo recargar mi UIViewController al hacer clic en algunos botones?
- 17. Cuadro de confirmación de JavaScript con botones personalizados
- 18. ¿Por qué los estados de los botones personalizados no funcionan?
- 19. ¿Cómo hacer que easy_install ejecute comandos personalizados en setup.py?
- 20. Cómo hacer que fitBounds tenga en cuenta los controles personalizados
- 21. Botones personalizados en Android: ¿Cómo obtener borde/borde/marco cuando leo el fondo de xml?
- 22. TVirtualStringTree - ¿Cómo cambiar los botones [-]/[+]?
- 23. JMenuItems personalizados en Java
- 24. ¿Cómo hacer para que los botones no se concentren?
- 25. Cómo usar controles personalizados en WPF
- 26. ¿Cómo hacer que mis emacs personalizados carguen más rápido?
- 27. Entrada de interfaz de usuario con reactive-banana-wx
- 28. Cómo dibujar controles de ventana personalizados (cerrar, minimizar y ampliar botones)
- 29. Hacer que get_adjacent_post() funcione en los tipos de publicación personalizados
- 30. QListView/QListWidget con elementos personalizados y widgets de elementos personalizados
muchas gracias por esto! ¡Lo usaré extensamente! – Mizmor