2009-06-01 15 views
3

私はスペイン語しか話せません。私は貧しい英語で書こうとします。申し訳ありません。ubuntuでWx.choiceが動作しない

私はwx.Pythonを学んでいます.Windows XPで小さな例を書いて、完璧に動作しますが、ubuntu Jauntyの同じコードはうまくいきません。

wx.Choiceのフォントが消えて表示され、オプションがほとんど表示されません。選択すると、ラベルは常に空になります。

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

印刷self.choice1.LabelはいつものUbuntuでEMPTY印刷しますWindowsでは、wx.choiceのオプションの1つであるsuma、restaまたはmulを期待どおりに出力します。

ricnar

+0

ところで、wxPythonの呼び出しが呼び出されると、ポイントやサイズをタプルに置き換えることができます。 –

答えて

2

それは、self.choice1.Labelを使用するとエラーです。あなたのコード全体でself.choice1.StringSelectionと置き換えて、あなたのコードが動作します!

+0

しかし、Windowsではラベルが動作します。互換性がある場合は、ubuntuで同様の作業が必要です。 ricnar –

+3

http://www.wxpython.org/docs/api/&cのラベルが "working"(StringSelectionと同じ)として文書化されていません。ウインドウで誤って動作するバグかもしれませんが、それは別のバージョンかもしれません(私は2.8.4を持っています)。私が説明したように、ドキュメントに従うようにコードを修正し、十分な気があればwxサイトのバグをオープンします(私はwxの開発者ではなく、単に人々を助けようとしています)。 –

+0

ありがとうございます。 そして、見た目はほとんど見えず、ほとんど見えない醜い外観? StringSelectionを使用すると、ウィンドウは私が投稿した画像と似ています ricnar –

関連する問題