2016-05-17 10 views
0

ich versuche nach rechts ganzen Zahlen in einem versuchten wx.Python GridBagSizerAusrichten numerischen Spalten in wx Python

Ich habe ausrichten das Etikett ausrichten und die Formatierung der Wert innerhalb des Etiketts, aber ohne Wirkung

Kann jemand bitte zeigen Sie mir, wo ich falsch werde

Dank

""" 
     module description 
    """ 

    import wx 
    import random 


    class AlignNumbers(wx.Frame): 
     """ 
      class description 
     """ 
     def __init__(self): 
      """ 
       initialise form 
      """ 
      wx.Frame.__init__(self, None) 
      self.Title = 'Align numbers' 

      lbl_points = wx.StaticText(self, label='Points') 
      lbl_first = wx.StaticText(self, label='First:') 
      lbl_second = wx.StaticText(self, label='Second:') 
      self.lbl_first_score = wx.StaticText(self, label='') 
      self.lbl_second_score = wx.StaticText(self, label='') 

      cmd_score = wx.Button(self, label='Score') 
      cmd_score.Bind(wx.EVT_BUTTON, self.on_cmd_score_click) 

      main_sizer = wx.GridBagSizer() 
      main_sizer.Add(lbl_points, pos=(0, 1), 
         flag=wx.TOP | wx.LEFT | wx.ALIGN_RIGHT, 
         border=10) 
      main_sizer.Add(lbl_first, pos=(1, 0), 
         flag=wx.TOP | wx.LEFT | wx.ALIGN_RIGHT, 
         border=10) 
      main_sizer.Add(lbl_second, pos=(2, 0), 
         flag=wx.TOP | wx.LEFT | wx.ALIGN_RIGHT, 
         border=10) 
      main_sizer.Add(self.lbl_first_score, pos=(1, 1), 
         flag=wx.TOP | wx.LEFT | wx.ALIGN_RIGHT, 
         border=10) 
      main_sizer.Add(self.lbl_second_score, pos=(2, 1), 
         flag=wx.TOP | wx.LEFT | wx.ALIGN_RIGHT, 
         border=10) 
      main_sizer.Add(cmd_score, pos=(3, 2), 
         flag=wx.TOP | wx.BOTTOM | wx.RIGHT | wx.ALIGN_RIGHT, 
         border=10) 
      self.SetSizer(main_sizer) 
      self.Layout() 
      self.Fit() 
      self.Centre() 
      self.scores = [score for score in range(-20, 21)] 

     def on_cmd_score_click(self, event): 
      del event 
      self.lbl_first_score.SetLabel('{}'.format(random.choice(self.scores))) 
      self.lbl_second_score.SetLabel('{:4d}'.format(random.choice(self.scores))) 

    if __name__ == '__main__': 
     """ 
      initialise application 
     """ 
     simple_screen_app = wx.App() 
     main_frame = AlignNumbers() 
     main_frame.Show(True) 
     simpl 

Antwort

1

Verwenden etwas anderes, dass StaticText Ihre Ausgabe, somet anzuzeigen dass Sie formatieren können.
Ich habe verwendet TextCtrl unter:

import wx 
import random 


class AlignNumbers(wx.Frame): 
    """ 
     class description 
    """ 
    def __init__(self): 
     """ 
      initialise form 
     """ 
     wx.Frame.__init__(self, None, size=(500,300)) 
     self.Title = 'Align numbers' 

     lbl_points = wx.StaticText(self, label='Points') 
     lbl_first = wx.StaticText(self, label='First:') 
     lbl_second = wx.StaticText(self, label='Second:') 
     self.lbl_first_score = wx.TextCtrl(self, -1, style=wx.ALIGN_RIGHT, size=(50,20)) 
     self.lbl_second_score = wx.TextCtrl(self, -1, style=wx.ALIGN_RIGHT, size=(50,20)) 

     cmd_score = wx.Button(self, label='Score') 
     cmd_score.Bind(wx.EVT_BUTTON, self.on_cmd_score_click) 

     main_sizer = wx.GridBagSizer(hgap=10,vgap=10) 
     main_sizer.Add(lbl_points, pos=(0, 2), 
        flag=wx.EXPAND | wx.ALL) 
     main_sizer.Add(lbl_first, pos=(1, 0), 
        flag=wx.EXPAND | wx.ALL) 
     main_sizer.Add(lbl_second, pos=(2, 0), 
        flag=wx.EXPAND | wx.ALL) 
     main_sizer.Add(self.lbl_first_score, pos=(1, 2), 
        flag=wx.EXPAND | wx.ALL) 
     main_sizer.Add(self.lbl_second_score, pos=(2, 2), 
        flag=wx.EXPAND | wx.ALL) 
     main_sizer.Add(cmd_score, pos=(3, 2), 
        flag=wx.EXPAND | wx.ALL) 
     self.SetSizer(main_sizer) 
     self.scores = [score for score in range(-20, 21)] 

    def on_cmd_score_click(self, event): 
     del event 
     self.lbl_first_score.SetValue('{}'.format(random.choice(self.scores))) 
     self.lbl_second_score.SetValue('{:4d}'.format(random.choice(self.scores))) 

if __name__ == '__main__': 
    """ 
     initialise application 
    """ 
    simple_screen_app = wx.App() 
    main_frame = AlignNumbers() 
    main_frame.Show(True) 
    simple_screen_app.MainLoop() 
+0

Dank Rolf. Ich scheine mich daran zu erinnern, etwas Ähnliches in einem früheren Leben zu tun (VB?) – Psionman

+0

Das alte, "nicht schon wieder", habe ich das letzte Mal sortiert, aber wie? Das passiert uns allen, besonders mir. –

Verwandte Themen