2013-09-19 2 views
0

Это мое первое приложение в Boa Constructor и мой первый раз с использованием wxPython.Конструкция кадра boa не запускается

#Boa:Frame:Frame1 

import wx 

choiceList = ['DAR', 'Impex', 'Endon', 'Astro', 'Ansell', 'Other'] 

def create(parent): 
    return Frame1(parent) 

[wxID_FRAME1, wxID_FRAME1BUTTONSELECTDIR, wxID_FRAME1BUTTONSELECTFILE, 
wxID_FRAME1CHOICESUPPLIER, 
] = [wx.NewId() for _init_ctrls in range(4)] 

class Frame1(wx.Frame): 
    def _init_ctrls(self, prnt): 
     # generated method, don't edit 
     wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt, 
       pos=wx.Point(517, 20), size=wx.Size(400, 492), 
       style=wx.DEFAULT_FRAME_STYLE, title='Frame1') 
     self.SetClientSize(wx.Size(392, 458)) 

     self.choiceSupplier = wx.Choice(choices=choiceList, id=wxID_FRAME1CHOICESUPPLIER, 
       name=u'choiceSupplier', parent=self, pos=wx.Point(48, 176), 
       size=wx.Size(120, 21), style=0) 
     self.choiceSupplier.Bind(wx.EVT_CHOICE, self.OnChoiceSupplierChoice, 
       id=wxID_FRAME1CHOICESUPPLIER) 

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

    def OnChoiceSupplierChoice(self, event): 
     supplier = choiceList[self.choiceSupplier.GetSelection()] 
     print supplier 

Мой код работает нормально, когда я нажимаю кнопку запуска. Однако, когда я пытаюсь изменить его в конструкторе я получаю сообщение об ошибке:

16:17:06: Traceback (most recent call last): 
16:17:06: File "C:\Python27\Lib\site-packages\boa-constructor\Models\wxPythonControllers.py", line 78, in OnDesigner  self.showDesigner() 
16:17:06: File "C:\Python27\Lib\site-packages\boa-constructor\Models\wxPythonControllers.py", line 143, in showDesigner  designer.refreshCtrl() 
16:17:06: File "C:\Python27\Lib\site-packages\boa-constructor\Views\Designer.py", line 399, in refreshCtrl  self.initObjectsAndCompanions(objCol.creators[1:], objCol, deps, depLnks) 
16:17:06: File "C:\Python27\Lib\site-packages\boa-constructor\Views\InspectableViews.py", line 127, in initObjectsAndCompanions  self.initObjCreator(constr) 
16:17:06: File "C:\Python27\Lib\site-packages\boa-constructor\Views\Designer.py", line 529, in initObjCreator  InspectableObjectView.initObjCreator(self, constrPrs) 
16:17:06: File "C:\Python27\Lib\site-packages\boa-constructor\Views\InspectableViews.py", line 155, in initObjCreator  constrPrs.comp_name, constrPrs.params) 
16:17:06: File "C:\Python27\Lib\site-packages\boa-constructor\Views\Designer.py", line 483, in loadControl  compClass=CtrlCompanion, evalDct=self.model.specialAttrs) 
16:17:06: File "C:\Python27\Lib\site-packages\boa-constructor\Views\Designer.py", line 62, in setupArgs  args = InspectableObjectView.setupArgs(self, ctrlName, params, dontEval, evalDct=evalDct) 
16:17:06: File "C:\Python27\Lib\site-packages\boa-constructor\View \InspectableViews.py", line 63, in setupArgs  evalDct) 
16:17:06: File "C:\Python27\Lib\site-packages\boa-constructor\PaletteMapping.py", line 158, in evalCtrl  return eval(expr, globals(), localsDct) 
16:17:06: File "<string>", line 1, in <module> 
16:17:06: NameError: name 'choiceList' is not defined 

ответ

1

наткнулся этим вопросом, глядя на что-то еще боа-конструктор, связанное, извините, если отвечать на любопытный отмершие сообщения здесь считаются бестактностью, я Здесь новый.

В любом случае, мое лучшее предположение, что вы сами возились с _init_ctrls, даже там есть комментарий «не редактируйте». Пробовал это сам пару раз, ну, боа не справляется с этим слишком хорошо. После изменения

self.choiceSupplier = wx.Choice(choices=choiceList 

в

self.choiceSupplier = wx.Choice(choices='' 

вы можете войти в конструктор еще раз, и быть в состоянии иметь, что и заполнить пункт wx.Choice я переместил список внутри INIT:

#Boa:Frame:Frame1 

import wx 

def create(parent): 
    return Frame1(parent) 

[wxID_FRAME1, wxID_FRAME1CHOICESUPPLIER, 
] = [wx.NewId() for _init_ctrls in range(2)] 

class Frame1(wx.Frame): 
    def _init_ctrls(self, prnt): 
     # generated method, don't edit 
     wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt, 
       pos=wx.Point(517, 20), size=wx.Size(408, 496), 
       style=wx.DEFAULT_FRAME_STYLE, title='Frame1') 
     self.SetClientSize(wx.Size(392, 458)) 

     self.choiceSupplier = wx.Choice(choices=self.choiceList, 
       id=wxID_FRAME1CHOICESUPPLIER, name=u'choiceSupplier', parent=self, 
       pos=wx.Point(0, 0), size=wx.Size(392, 21), style=0) 
     self.choiceSupplier.Bind(wx.EVT_CHOICE, self.OnChoiceSupplierChoice, 
       id=wxID_FRAME1CHOICESUPPLIER) 

    def __init__(self, parent): 
     self.choiceList = ['DAR', 'Impex', 'Endon', 'Astro', 'Ansell', 'Other'] 
     self._init_ctrls(parent) 

    def OnChoiceSupplierChoice(self, event): 
     supplier = choiceList[self.choiceSupplier.GetSelection()] 
     print supplier 

if __name__ == '__main__': 
    application = wx.PySimpleApp() 
    someFrame = Frame1(None) 
    someFrame.Show() 
    application.MainLoop() 

Возможно, проблема заключается в том, как сеанс дизайнера анализирует файл, отсутствующий в списке, который является внешним по отношению к классу.