2016-09-19 1 views
0

je le code suivant:se chevauchent

self.btn1 = wx.Button(self, -1, _("a")) 
    self.btn2 = wx.Button(self, -1, _("b")) 
    btnSizer = wx.BoxSizer(wx.HORIZONTAL) 
    btnSizer.Add(self.btn1 , 0, wx.RIGHT, 10) 
    btnSizer.Add(self.btn2 , 0, wx.RIGHT, 10) 

Cela fonctionne bien. Cependant, il y a un cas où je change le titre de btn2:

self.btn1.SetLabel('bbbbb') 

Quand je fais cela btn1 chevauchements btn2 ....

première ligne

est la deuxième rangée d'origine est après l'étiquette définie.

enter image description here

Comment puis-je faire le rafraîchissement de l'écran à la nouvelle taille des boutons?

+0

Votre code ne suffit pas pour le tester. Avez-vous des calibreurs imbriqués ou quelque chose? – Sevanteri

Répondre

1

Vous pouvez utiliser self.Layout() mais dans ce cas, cela ne devrait vraiment pas être nécessaire. Il doit y avoir un problème avec votre code.

import wx 

class ButtonFrame(wx.Frame): 
    def __init__(self, value): 
     wx.Frame.__init__(self,None) 
     self.btn1 = wx.Button(self, -1, ("a")) 
     self.btn2 = wx.Button(self, -1, ("b")) 
     self.btnSizer = wx.BoxSizer(wx.HORIZONTAL) 
     self.btnSizer.Add(self.btn1 , 0, wx.RIGHT, 10) 
     self.btnSizer.Add(self.btn2 , 0, wx.RIGHT, 10) 
     self.btn1.Bind(wx.EVT_BUTTON, self.OnPressA) 
     self.btn2.Bind(wx.EVT_BUTTON, self.OnPressB) 
     self.SetSizer(self.btnSizer) 
     self.Centre() 
     self.Show() 

    def OnPressA(self,evt): 
     self.btn1.SetLabel('bbbbbbbbbbbbbbbbbbbbbbbbbb') 
#  self.Layout() 

    def OnPressB(self,evt): 
     self.btn2.SetLabel('aaaaaaaaaaaaaaaaaaaaaaaaaa') 
#  self.Layout() 

if __name__ == "__main__": 
    app = wx.App(False) 
    ButtonFrame(None) 
    app.MainLoop() 
+0

'Update()' déclenche juste un repaint du widget. Ce qui est nécessaire dans ce cas est quelque chose comme 'self.btnSizer.Layout()' – RobinDunn

+0

@RobinDunn Merci, ajusté en conséquence. Bien que, je pense toujours qu'il y a un autre problème que le PO a avec leur code. –