Вопрос

Я пытаюсь изменить элементы управления Panel, обновить ее и продолжить выполнение кода. Кажется, проблема в том, что Panel ждет простоя, прежде чем обновится. Я, конечно, пробовал обновить, а также GetSizer (). Layout () и даже отправил событие изменения размера во фрейм с помощью метода SendSizeEvent (), но безрезультатно. Я в недоумении, мне трудно поверить, что нет способа заставить перерисовать эту панель. Вот код, который меняет элементы управления:

def HideButtons(self):
        self.newButton.Show(False)
        self.openButton.Show(False)
        self.exitButton.Show(False)
        self.buttonSizer.Detach(self.newButton)
        self.buttonSizer.Detach(self.openButton)
        self.buttonSizer.Detach(self.exitButton)
        loadingLabel = wx.StaticText(self.splashImage, wx.ID_ANY, "Loading...", style=wx.ALIGN_LEFT)
        loadingLabel.SetBackgroundColour(wx.WHITE)
        self.buttonSizer.Add(loadingLabel)
        self.GetSizer().Layout()
        self.splashImage.Refresh()

Кто-нибудь еще сталкивался с чем-то подобным? И как ты решил это, если так?

Это было полезно?

Решение

Вам нужно вызвать Update .

Другие советы

У меня был StaticBitmap , который, аналогично, не обновлялся бы ни одним из этих методов (включая Update , предложенный в принятом ответе).

Я обнаружил, что вызова .Hide () и .Show () на Panel было достаточно для обновления изображения. Я подозреваю, что то же самое было бы верно, если бы я запускал функции для объектов более низкого уровня, таких как StaticBitmap .

Вы можете разместить изменяемую часть панели на подпанелях, например, как это:

def MakeButtonPanels(self):
    self.buttonPanel1 = wx.Panel(self)
    self.Add(self.buttonPanel1, 0, wxALL|wxALIGN_LEFT, 5)
    # ... make the three buttons and the button sizer on buttonPanel1

    self.buttonPanel2 = wx.Panel(self)
    self.Add(self.buttonPanel2, 0, wxALL|wxALIGN_LEFT, 5)
    # ... make the loading label and its sizer on buttonPanel2

    self.buttonPanel2.Show(False) # hide it by default

def HideButtons(self):
    self.buttonPanel1.Show(False)
    self.buttonPanel2.Show(True)
    self.Layout()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top