2009-06-01 6 views
3

Je ne parle que l'espagnol, je vais essayer d'écrire dans mon pauvre anglais, désolé. J'apprenais wx.Python et j'écris un petit exemple dans Windows XP et fonctionne parfaitement, mais le même code dans ubuntu Jaunty ne fonctionne pas bien. Les polices de wx.Choice apparaissent désaffectées et les options sont à peine visibles, lorsque vous en choisissez une, l'étiquette est toujours vide.Wx.choice ne fonctionne pas dans Ubuntu

hxxp: //ricardonarvaja.info/WEB/OTROS/BOA%20CONSTRUCTOR%20PASO%20A%20PASO/instantanea1.png

enter code here 
#Boa:Frame:Frame1 

import wxversion 
wxversion.select('2.8') 
import wx 

print wx.version() 
def create(parent): 
    return Frame1(parent) 

[wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1CHOICE1, wxID_FRAME1PANEL1, 
wxID_FRAME1TEXTCTRL1, wxID_FRAME1TEXTCTRL2, 
] = [wx.NewId() for _init_ctrls in range(6)] 

class Frame1(wx.Frame): 
    def _init_sizers(self): 
     # generated method, don't edit 
     self.boxSizer1 = wx.BoxSizer(orient=wx.VERTICAL) 

    def _init_ctrls(self, prnt): 
     # generated method, don't edit 
     wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt, 
       pos=wx.Point(473, 288), size=wx.Size(364, 190), 
       style=wx.DEFAULT_FRAME_STYLE, title='Frame1') 
     self.SetClientSize(wx.Size(356, 156)) 

     self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self, 
       pos=wx.Point(0, 0), size=wx.Size(356, 156), 
       style=wx.TAB_TRAVERSAL) 

     self.textCtrl1 = wx.TextCtrl(id=wxID_FRAME1TEXTCTRL1, name='textCtrl1', 
       parent=self.panel1, pos=wx.Point(40, 16), size=wx.Size(100, 21), 
       style=0, value=u'') 
     self.textCtrl1.Bind(wx.EVT_SET_FOCUS, self.OnTextCtrl1SetFocus) 

     self.textCtrl2 = wx.TextCtrl(id=wxID_FRAME1TEXTCTRL2, name='textCtrl2', 
       parent=self.panel1, pos=wx.Point(40, 48), size=wx.Size(100, 21), 
       style=0, value=u'') 
     self.textCtrl2.Bind(wx.EVT_SET_FOCUS, self.OnTextCtrl2SetFocus) 

     self.button1 = wx.Button(id=wxID_FRAME1BUTTON1, label=u'SUMAR', 
       name='button1', parent=self.panel1, pos=wx.Point(140, 101), 
       size=wx.Size(75, 23), style=0) 
     self.button1.Center(wx.HORIZONTAL) 
     self.button1.Bind(wx.EVT_BUTTON, self.OnButton1Button, 
       id=wxID_FRAME1BUTTON1) 

     self.choice1 = wx.Choice(choices=['suma', 'resta', 'mult'], 
       id=wxID_FRAME1CHOICE1, name='choice1', parent=self.panel1, 
       pos=wx.Point(160, 40), size=wx.Size(146, 21), style=0) 
     self.choice1.Bind(wx.EVT_CHOICE, self.OnChoice1Choice, 
       id=wxID_FRAME1CHOICE1) 

     self._init_sizers() 

    def __init__(self, parent): 
     self._init_ctrls(parent) 

    # XXX Este codigo esta sin terminar 
    def OnButton1Button(self, event): 

     print self.choice1.Label 
     try: 
      if self.choice1.Label=='suma': 
       suma=int(self.textCtrl1.Value)+int(self.textCtrl2.Value) 
       self.button1.Label='Suma = ' + str(suma) 
      if self.choice1.Label=='resta': 
       suma=int(self.textCtrl1.Value)- int(self.textCtrl2.Value) 
       self.button1.Label='Resta = ' + str(suma) 
      if self.choice1.Label=='mult': 
       suma=int(self.textCtrl1.Value) * int(self.textCtrl2.Value) 
       self.button1.Label='Mult = ' + str(suma) 
     except: 
      self.button1.Label='Error tipo de datos' 
      self.textCtrl1.Value='' 
      self.textCtrl2.Value='' 

     event.Skip() 

    def OnTextCtrl1SetFocus(self, event): 
     self.textCtrl1.Value='' 
     print self.choice1.Label 
     if self.choice1.Label=='suma': 
      self.button1.Label='SUMAR' 
     if self.choice1.Label=='resta': 
      self.button1.Label='RESTAR' 
     if self.choice1.Label=='mult': 
      self.button1.Label='MULT' 
     event.Skip() 

    def OnTextCtrl2SetFocus(self, event): 
     self.textCtrl2.Value='' 
     print self.choice1.Label 
     if self.choice1.Label=='suma': 
      self.button1.Label='SUMAR' 
     if self.choice1.Label=='resta': 
      self.button1.Label='RESTAR' 
     if self.choice1.Label=='mult': 
      self.button1.Label='MULT' 
     event.Skip() 

    def OnChoice1Choice(self, event): 

     if self.choice1.Label=='suma': 
      self.button1.Label='SUMAR' 
     if self.choice1.Label=='resta': 
      self.button1.Label='RESTAR' 
     if self.choice1.Label=='mult': 
      self.button1.Label='MULT' 

     event.Skip() 


if __name__ == '__main__': 
    app = wx.PySimpleApp() 
    frame = create(None) 
    frame.Show() 

    app.MainLoop() 

L'impression self.choice1.Label toujours imprimer VIDES dans ubuntu , et dans Windows impression suma, resta ou mul, une des options de la wx.choice, comment prévu.

ricnar

+0

BTW, vous pouvez généralement remplacer les points et les tailles avec des tuples lors des appels fonctions wxPython. –

Répondre

2

Il est une erreur d'utiliser self.choice1.Label; remplacez-le dans votre code avec self.choice1.StringSelection et votre code fonctionne!

+0

Mais dans les travaux d'étiquette de Windows, s'il y a compatibilité, doit être travail semblable dans Ubuntu. ricnar –

+3

Je ne vois pas d'étiquette documentée comme "fonctionnant" (identique à StringSelection) dans http://www.wxpython.org/docs/api/ & c - il peut s'agir d'un bug qui fonctionne accidentellement dans Windows, ou il peut être une version différente (j'ai 2.8.4). Fixez votre code pour suivre la documentation, comme je viens de l'expliquer, et ouvrez un bug sur le site wx si vous y tenez suffisamment (je ne suis pas un développeur wx, j'essaie juste d'aider les gens). –

+0

Merci. Et l'apparence laide avec les polices desfased et à peine visible? En utilisant StringSelection, les fenêtres ressemblent à l'image affichée par moi ricnar –