新面板仅在 window 调整大小时激活:WxPython
New panel activating only when window resized: WxPython
我想删除一个面板 ( mainPanel ) 并替换一个面板 ( secPanel )。我试过的代码:
import wx
class secPanel ( wx.Panel ):
def __init__ ( self, parent ):
wx.Panel.__init__ ( self, parent = parent )
wx.TextCtrl ( self, pos = ( 100, 100 ) )
class mainPanel ( wx.Panel ):
def __init__ ( self, parent ):
wx.Panel.__init__ ( self, parent = parent )
self.parent = parent
b = wx.Button ( self, label = "Test", pos = ( 100, 100 ) )
self.Bind ( wx.EVT_BUTTON, self.onPress, b )
def onPress ( self, event ):
parent = self.parent
self.Destroy()
secPanel ( parent )
class Window ( wx.Frame ):
def __init__ ( self ):
wx.Frame.__init__ ( self, parent = None, title = "" )
mainPanel ( self )
self.Show()
if __name__ == "__main__":
app = wx.App()
window = Window()
app.MainLoop()
mainPanel 被删除,但 secPanel 仅在 window 调整大小时显示(即使只有一个像素也有效)。在我调整大小之前,它会显示一个灰色屏幕(没有任何面板会显示的屏幕)。这很烦人。
在这种情况下 Layout()
是你的朋友。
通常 Layout()
在涉及 sizer 时使用,但在这种情况下,没有 sizer 但 parent
是 wx.TopLevelWindow
.
Layout
使用 window sizer 布置子项或调整 window 的唯一子项的大小以覆盖其整个区域。
wx.TopLevelWindow.Layout
覆盖基础 class 布局方法以检查此 window 是否恰好包含一个子项 - 通常情况下,wx.Panel 通常被创建为wx.TopLevelWindow 的唯一子节点 – 并且,如果是这种情况,调整此子节点的大小 window 以覆盖整个客户区。
见下文parent.Layout()
:
import wx
class secPanel ( wx.Panel ):
def __init__ ( self, parent ):
wx.Panel.__init__ ( self, parent = parent )
wx.TextCtrl ( self, pos = ( 100, 100 ) )
class mainPanel ( wx.Panel ):
def __init__ ( self, parent ):
wx.Panel.__init__ ( self, parent = parent )
self.parent = parent
b = wx.Button ( self, label = "Test", pos = ( 100, 100 ) )
self.Bind ( wx.EVT_BUTTON, self.onPress, b )
def onPress ( self, event ):
parent = self.parent
self.Destroy()
secPanel ( parent )
parent.Layout()
class Window ( wx.Frame ):
def __init__ ( self ):
wx.Frame.__init__ ( self, parent = None, title = "" )
mainPanel ( self )
self.Show()
if __name__ == "__main__":
app = wx.App()
window = Window()
app.MainLoop()
我想删除一个面板 ( mainPanel ) 并替换一个面板 ( secPanel )。我试过的代码:
import wx
class secPanel ( wx.Panel ):
def __init__ ( self, parent ):
wx.Panel.__init__ ( self, parent = parent )
wx.TextCtrl ( self, pos = ( 100, 100 ) )
class mainPanel ( wx.Panel ):
def __init__ ( self, parent ):
wx.Panel.__init__ ( self, parent = parent )
self.parent = parent
b = wx.Button ( self, label = "Test", pos = ( 100, 100 ) )
self.Bind ( wx.EVT_BUTTON, self.onPress, b )
def onPress ( self, event ):
parent = self.parent
self.Destroy()
secPanel ( parent )
class Window ( wx.Frame ):
def __init__ ( self ):
wx.Frame.__init__ ( self, parent = None, title = "" )
mainPanel ( self )
self.Show()
if __name__ == "__main__":
app = wx.App()
window = Window()
app.MainLoop()
mainPanel 被删除,但 secPanel 仅在 window 调整大小时显示(即使只有一个像素也有效)。在我调整大小之前,它会显示一个灰色屏幕(没有任何面板会显示的屏幕)。这很烦人。
在这种情况下 Layout()
是你的朋友。
通常 Layout()
在涉及 sizer 时使用,但在这种情况下,没有 sizer 但 parent
是 wx.TopLevelWindow
.
Layout
使用 window sizer 布置子项或调整 window 的唯一子项的大小以覆盖其整个区域。
wx.TopLevelWindow.Layout
覆盖基础 class 布局方法以检查此 window 是否恰好包含一个子项 - 通常情况下,wx.Panel 通常被创建为wx.TopLevelWindow 的唯一子节点 – 并且,如果是这种情况,调整此子节点的大小 window 以覆盖整个客户区。
见下文parent.Layout()
:
import wx
class secPanel ( wx.Panel ):
def __init__ ( self, parent ):
wx.Panel.__init__ ( self, parent = parent )
wx.TextCtrl ( self, pos = ( 100, 100 ) )
class mainPanel ( wx.Panel ):
def __init__ ( self, parent ):
wx.Panel.__init__ ( self, parent = parent )
self.parent = parent
b = wx.Button ( self, label = "Test", pos = ( 100, 100 ) )
self.Bind ( wx.EVT_BUTTON, self.onPress, b )
def onPress ( self, event ):
parent = self.parent
self.Destroy()
secPanel ( parent )
parent.Layout()
class Window ( wx.Frame ):
def __init__ ( self ):
wx.Frame.__init__ ( self, parent = None, title = "" )
mainPanel ( self )
self.Show()
if __name__ == "__main__":
app = wx.App()
window = Window()
app.MainLoop()