Как динамически получить список всех компонентов PythonCard в классе GUI? - PullRequest
1 голос
/ 10 сентября 2010

Вот пример файла ресурсов для PythonCard:

{ 'application':{ 'type':'Application',
            'name':'Test Sounds',

    'backgrounds':
 [ 
  { 'type':'Background',
    'name':'Test Sounds',
    'title':'Test Sounds',
    'position':( 5, 5 ),
    'size':( 300, 200 ),

   'components':
   [ 
    { 'type':'TextField', 'name':'fldFilename', 'position':( 5, 4 ), 'size':( 200, -1 ), 'text':'anykey.wav' },
    { 'type':'Button', 'name':'btnFile', 'position':( 210, 5 ), 'size':( -1, -1), 'label':'Select File' },
    { 'type':'Button', 'name':'btnPlay', 'position':( 5, 40 ), 'size':( -1, -1 ), 'label':'Play' },
    { 'type':'CheckBox', 'name':'chkAsync', 'position':( 5, 70 ), 'size':( -1, -1 ), 'label':'Async I/O', 'checked':0 },
    { 'type':'CheckBox', 'name':'chkLoop', 'position':( 5, 90 ), 'size':( -1, -1 ), 'label':'Loop sound', 'checked':0 },
   ] } ] } }

С этим исходным файлом:

from PythonCard import model

class Sounds(model.Background):

    # Some irrelevant methods... #

if __name__ == '__main__':
    app = model.Application(Sounds)
    app.MainLoop()

Как мне поступить динамически , получая список всех компонентов "Кнопка" (например) из класса GUI?

Доступ к компонентам осуществляется таким образом self.components.<component name>, поэтому моя первоначальная мысль была for x in self.components: ..., но self.components не повторяется.

1 Ответ

0 голосов
/ 25 мая 2011

Было бы намного чище, если бы вы могли получить список компонентов из других мест, но я думаю, что это должно работать, если вы сделаете что-то вроде:

for comp_name in dir(self.components):
    if comp_name.startswith('_'):    # ignore special members like __repr__
        continue
    component = getattr(self.components, comp_name)
    ...
...