2013-06-27 3 views
1

Я использую утилиты Phil's PyGame (PGU). У меня есть область, которая должна отображать изменяющийся прокручиваемый список переменных. Это окно отладки, которое должно показывать текущие обновления переменных по мере их изменения. Я попытался сделать это с несколькими различными виджетами и несколькими разными способами, но у меня возникла проблема с блокировкой полосы прокрутки при обновлении виджета в цикле обновления.PyGame PGU Обновление/перекрашивание виджетов

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

Вот как я думал, что это должно работать:

self.l = gui.List(width = self.config['uiwidth']-10, height = self.config['height']-230) 
self.add(self.l, 5, 255) 

self.label = gui.Label("UNCHANGED",align=-1) 

    if self.firstTimeSelectingBot == True: 
     for i in range(len(dbot.customDebugVariableList)): 
      self.l.add(self.label, value = i) 
     self.firstTimeSelectingBot = False 
    self.label = gui.Label("CHANGED",align=-1) 
    self.label.repaint() 

Он добавляет метку в список, а затем изменяет метку. Я думал, что вызов repaint перекрасит ярлык, чтобы отобразить новый ярлык, но ничего не меняется. Я пробовал это с таблицами и списками, но единственный способ показать его - это полностью очистить список/таблицу и повторно добавить все, что вызывает проблемы с прокруткой и частотой кадров.

Любая помощь или идеи? Благодарю.

+0

Документация Pgu довольно расплывчата, но я думаю, вы должны заглянуть в «следующую» функцию, встроенную в объект виджета. Это может быть то, что вы ищете. –

ответ

0

Вы хотите использовать label.set_text для изменения текста на ярлыке. Поэтому, используя ваш код в качестве примера

self.l = gui.List(width = self.config['uiwidth']-10, height = self.config['height']-230) 
self.add(self.l, 5, 255) 

self.label = gui.Label("UNCHANGED",align=-1) 

    if self.firstTimeSelectingBot == True: 
     for i in range(len(dbot.customDebugVariableList)): 
      self.l.add(self.label, value = i) 
     self.firstTimeSelectingBot = False 
    self.label.set_text("CHANGED") 

Вы заметите, однако, что выравнивание было выведено. Ярлык Label.set_text терпит неудачу, когда вы его помещаете, однако выравнивание, установленное при создании метки, сохраняется до тех пор, пока вам не нужно будет изменять это. Взгляните на строки pgu/gui/basic.py 96-129 для самого класса ярлыков, как я понял это (я тоже сам искал ответ).