2009-08-05 22 views
9

Tôi đang cố gắng sửa đổi các điều khiển của Bảng điều khiển, cập nhật, sau đó tiếp tục thực hiện mã. Vấn đề có vẻ là Panel đang chờ Idle trước khi nó sẽ tự làm mới. Tôi đã thử làm mới tất nhiên cũng như GetSizer() Layout() và thậm chí đã gửi một sự kiện thay đổi kích cỡ cho khung bằng cách sử dụng phương thức SendSizeEvent(), nhưng không có kết quả. Tôi đang thua lỗ ở đây, tôi cảm thấy khó tin rằng không có cách nào để buộc vẽ lại bảng điều khiển này. Dưới đây là mã thay đổi các điều khiển:Làm thế nào để bạn buộc làm mới của một wx.Panel?

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() 

Có ai khác đã gặp phải bất kỳ điều gì như thế này không? Và làm thế nào bạn giải quyết nó nếu như vậy?

+0

Bạn đã thử 'self.Show()' chưa? –

Trả lời

13

Bạn cần gọi phương thức Update.

+3

'Update()' một mình đã không giúp đỡ trong trường hợp của tôi ('StaticBitmap' trong 'GridSizer' trên' Panel'), nhưng các tài liệu nói 'Refresh()' sẽ kích hoạt một repaint vô điều kiện - mà nó đã làm khi theo sau bởi 'Cập nhật()' – virtualnobi

+0

Trong thực tế, chỉ cần 'Refresh()' làm việc cho tôi !? – GreenAsJade

+0

Phoenix đã thay đổi cấu trúc liên kết tài liệu. 'Update' [đã di chuyển] (https://wxpython.org/Phoenix/docs/html/wx.Window.html?highlight=wx.window#wx.Window.Update). Đây chính xác là những gì tôi đang tìm kiếm. Cảm ơn! –

1

Bạn có thể đặt phần có thể thay đổi của bảng điều khiển trên bảng con, ví dụ: như thế này:

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() 
+0

Đó là ẩn và hiển thị một phần không được thực hiện – Fry

4

Tôi đã có một StaticBitmap, tương tự, sẽ không cập nhật bởi bất kỳ kỹ thuật nào trong số này (bao gồm cả Update được đề xuất trong câu trả lời được chấp nhận).

Tôi thấy rằng việc gọi .Hide().Show() trên Panel là đủ để làm mới hình ảnh. Tôi nghi ngờ rằng điều tương tự sẽ đúng nếu tôi đã chạy các hàm chống lại một đối tượng cấp thấp hơn như là StaticBitmap.

Các vấn đề liên quan