Как сделать пользовательские кнопки в wx?

Хорошо абсолютно оставлять память неосвобожденной, когда Вы выходите; malloc () выделяет память от области памяти, названной ""куча"", и полная "куча" процесса освобождена, когда процесс выходит.

Однако одна причина, почему люди все еще настаивают, что хорошо освободить все, прежде чем выход состоит в том, что отладчики памяти (например, valgrind на Linux) обнаруживают неосвобожденные блоки как утечки памяти, и если у Вас есть также "реальные" утечки памяти, становится более трудным определить их, если Вы также получаете "поддельные" результаты в конце.

6
задан Gabriele Cirulli 29 August 2009 в 13:31
поделиться

4 ответа

Вот скелет, который вы можете использовать для рисования полностью настраиваемой кнопки, его зависит от вашего воображения, как он выглядит или ведет себя

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 
8
ответ дан 8 December 2019 в 13:01
поделиться

Когда я хотел узнать, как создавать собственные виджеты (включая кнопки), я сослался на страницу Андреа Гаваны (полный рабочий пример там) на wxPyWiki и кнопку Коди Прекорда ( исходный код находится в wx.lib.platebtn, также здесь в svn). Посмотрите на оба варианта, и вы сможете создать практически любой пользовательский виджет, который вам нужен.

5
ответ дан 8 December 2019 в 13:01
поделиться

Класс кнопки по умолчанию можно расширить, например, так:

class RedButton(wx.Button):
    def __init__(self, *a, **k):
        wx.Button.__init__(self, *a, **k)
        self.SetBackgroundColour('RED')
        # more customization here

Каждый раз, когда вы вставляете RedButton в свой макет, она должна отображаться красным (не хотя тестировал).

3
ответ дан 8 December 2019 в 13:01
поделиться

Попробуйте использовать обычную кнопку или кнопку Bitmap .

2
ответ дан 8 December 2019 в 13:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: