wxPython:更新wxStatic上的标签会导致文本格式错误

问题描述

|| 我有一个使用wxpython的表单,表单上的对象之一显示用户的Windows登录名。
self.stIwpcadmin = wx.StaticText(self.panelLower,-1,\"NONE\")
当然,直到运行时,我才知道名称是什么,所以我创建了一个带有\'NONE \'标签的wxStatic对象,然后在运行时它获取用户名并更改了标签
sUsername = getpass.getuser()
self.stIwpcadmin.SetLabel(\'WINDOWS/\'+sUsername)
发生这种情况时,它会更新wxStatic对象的文本。问题在于它“运行”到GridSizer中的下一个对象中。如果我调整窗口的大小(任何大小,无论更大或更小),它都将强制对象重新绘制,并正确填写文本。 我如何通过需要用户更改窗口大小来强制这种情况发生? 这是显示wxStatic信息的sizer数据的代码。我剪切了一些代码以使其尽可能简短。简而言之self.stIwpcadmin-> grid_sizer_1-> sizerPassword-> sizerLower-> self.panelLower-> mainSizer
def __do_layout(self):
    # begin wxGlade: mainFrame.__do_layout
    mainSizer = wx.GridSizer(2,1,0)
    sizerLower = wx.GridSizer(1,2,0)
    sizerInstall = wx.StaticBoxSizer(self.sizerInstall_staticBox,wx.HORIZONTAL)
    sizerInstallButtons = wx.GridSizer(1,0)
    sizer_4 = wx.BoxSizer(wx.VERTICAL)
    sizerPassword = wx.StaticBoxSizer(self.sizerPassword_staticBox,wx.HORIZONTAL)
    grid_sizer_1 = wx.GridSizer(8,3,0)
    mainSizer.Add(self.panelUpper,wx.EXPAND,0)
    grid_sizer_1.Add(self.stIwpcadmin,wx.ALL|wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL,2)
    grid_sizer_1.Add(self.txIwpcadmin,wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL,2)
    grid_sizer_1.Add(self.btnIwpcadmin,wx.ALL|wx.ALIGN_CENTER_VERTICAL,2)
    grid_sizer_1.Add(self.panel_1,0)
    grid_sizer_1.Add(self.panel_2,0)
    grid_sizer_1.Add(self.btnValidateall,2)
    sizerPassword.Add(grid_sizer_1,0)
    sizerLower.Add(sizerPassword,0)
    self.panelLower.SetSizer(sizerLower)
    mainSizer.Add(self.panelLower,0)
    self.SetSizer(mainSizer)
    mainSizer.Fit(self)
    self.Layout()
    

解决方法

        您需要使用适当命名的Layout方法来强制sizer重做其布局。