问题描述
||
我有一个使用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重做其布局。