tags:

views:

318

answers:

1

I speak only spanish, i will try to write in my poor english, sorry.

I'm learning wx.Python and i write a small example in Windows XP and run perfect, but the same code in ubuntu Jaunty don't work well.

The fonts of wx.Choice appear desfased and the options are barely visible, when you chosee one, the Label is always empty.

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()

The print self.choice1.Label always print EMPTY in ubuntu, and in Windows print suma, resta or mul, one of the options of the wx.choice, how expected.

ricnar

+1  A: 

It's an error to use self.choice1.Label; replace it throughout your code with self.choice1.StringSelection and your code works!

Alex Martelli
But in windows Label works, if there are compatibility, must be work similar in ubuntu.ricnar
Alex Martelli
Thanks.And the ugly appearence with the fonts desfased and barely visible? Using StringSelection the windows looks similar to the image posted by mericnar
I don't particularly like the appearance of wx apps, either -- but, hey, that's part of why, by preference, I use PyQt instead;-) Anyway, depending on what fonts you have installed, you can definitely play around with fonts -- see http://www.wxpython.org/docs/api/wx.Font-class.html and its links.
Alex Martelli