如何将画布添加到sizer并刷新父帧?

我使用的是wxPython。我需要能够按需添加和删除面板/画布,但我不知道如何刷新整个父框架(基础起始窗口)。我尝试使用FULL_REPAINT选项,但无济于事。我用来添加和(希望)刷新框架的方法Add_Canvas()从第50行开始。

选择 | 换行 | 行号
  1. canvas_List = [Cone_Canvas, CubeCanvas]
  2.  
  3. class MainWindow(wx.Frame):
  4.     def __init__(self, parent = None, id = -1, title = "PyOpenGL Example 1"):
  5.         # Init
  6.         wx.Frame.__init__(
  7.                 self, parent, id, title, size = (400,200),
  8.                 style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE
  9.         )
  10.  
  11.         # TextCtrl
  12.         # self.control = wx.TextCtrl(self, -1, style = wx.TE_MULTILINE)
  13.  
  14.         #self.control = ConeCanvas(self)
  15.  
  16.         box = wx.BoxSizer(wx.HORIZONTAL)
  17.  
  18.     for canvas in canvas_List:
  19.         box.Add(canvas(self), 1, wx.EXPAND)
  20.  
  21.  
  22.         self.SetAutoLayout(True)
  23.         self.SetSizer(box)
  24.         self.Layout()
  25.  
  26.         # StatusBar
  27.         self.CreateStatusBar()
  28.  
  29.         # Filemenu
  30.         filemenu = wx.Menu()
  31.  
  32.         # Filemenu - About
  33.         menuitem = filemenu.Append(-1, "Add Canvas", "Add a Canvas")
  34.         self.Bind(wx.EVT_MENU, self.Add_Canvas, menuitem) # here comes the event-handler
  35.         # Filemenu - Separator
  36.         filemenu.AppendSeparator()
  37.  
  38.         # Filemenu - Exit
  39.         menuitem = filemenu.Append(-1, "E&xit", "Terminate the program")
  40.         self.Bind(wx.EVT_MENU, self.OnExit, menuitem) # here comes the event-handler
  41.  
  42.         # Menubar
  43.         menubar = wx.MenuBar()
  44.         menubar.Append(filemenu,"&File")
  45.         self.SetMenuBar(menubar)
  46.  
  47.         # Show
  48.         self.Show(True)
  49.  
  50. #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
  51.  
  52.     # What do I call(or can I call anything at all?) to
  53.     #    repaint the entire frame? 
  54.  
  55.     def Add_Canvas(self,event):
  56.         canvas_List.append(Cube_Canvas)
  57.         Repaint_Frame() # <---- pseudo....
  58.  
  59. #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
  60.  
  61.     def OnExit(self,event):
  62.         self.Close(True)  # Close the frame.
  63.  
# 回答1


我不使用WX,但知道它确实有一个刷新()函数。有关更多信息,请尝试使用谷歌。
# 回答2


我已经试过了。什么都没发生。
# 回答3


不要紧……这是一个名称空间冲突。我不得不将代号为'box'的SIZER重命名为'self.box'。窗口正在刷新,没有问题,但由于实际上没有任何附加到Sizzer,所以没有可见的结果来确认窗口的更新,我认为它没有发生。:P但是,是的,它确实起作用了。谢谢。

标签: python

添加新评论