wx Python: изменение изображения кнопки - PullRequest
0 голосов
/ 01 марта 2020

Я бы хотел изменить изображение кнопки в wx Python. Я могу скрыть и удалить кнопку, но когда я пытаюсь снова добавить кнопку в то же место, она появляется не в том месте. Чего мне не хватает?

Детали: я создаю класс для wx.Panel. У класса есть конструктор. В классе есть две кнопки. Когда вы нажимаете первую кнопку, вторая кнопка скрывается, а затем удаляется из классификатора. Когда первая кнопка нажата, вызывается функция «clicked ()». Функция «clicked ()» сначала скрывает кнопку, которую нужно удалить, а затем удаляет ее из классификатора. Когда функция «clicked ()» пытается добавить еще одну кнопку в то же место, где находилась вторая кнопка, в верхней части пользовательского интерфейса появляется новая кнопка.

Я хотел бы, чтобы новая кнопка была помещен в то же место, что и старый. Как мне это сделать?

class Panel(wx.Panel):

    def __init__(self, parent):

        super(Panel, self).__init__(parent)

        self.sizer = wx.GridBagSizer(11, 14)

        self.button01 = wx.Button(self, label="01")
        self.sizer.Add(self.button01, pos=(2, 0))

        self.Bind(wx.EVT_BUTTON, self.clicked, self.button01)

        self.pic = wx.Bitmap("light.jpg", wx.BITMAP_TYPE_ANY)
        self.buttonpic = wx.BitmapButton(self, -1, self.pic)
        self.sizer.Add(self.buttonpic, pos=(3, 1), flag=wx.LEFT, border=10)
        self.sizer.AddGrowableCol(2)    
        self.SetSizer(self.sizer)
        self.sizer.Fit(self)


    def clicked(self, event):

        self.sizer.Hide(   2 )
        self.sizer.Remove( 2 )

        self.pic = wx.Bitmap("dark.jpg", wx.BITMAP_TYPE_ANY)
        self.buttonpic = wx.BitmapButton(self, -1, self.pic)
        self.sizer.Add(self.buttonpic, pos=(3, 1), flag=wx.LEFT, border=10)

        event.Skip()

Редактировать: Мне пришлось удалить много кода из исходного кода, чтобы StackOverflow мог принять мой вопрос, поэтому целое число, данное Функции Hide () и Remove () могут быть некорректны в этом примере, но скрытие и удаление кнопки работает в исходном коде без ошибок.

1 Ответ

1 голос
/ 01 марта 2020

Вместо создания нового виджета просто вызовите метод SetBitmap существующей кнопки.

В тех случаях, когда новый виджет действительно необходим, обязательно вызовите метод Layout sizer впоследствии, чтобы sizer переделает макет и переместит этот виджет на место.

...