2013-06-27 64 views
1

我使用Phil的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的文檔相當模糊,但我認爲你應該看看構建在widget對象中的「next」函數。這可能是你正在尋找的。 –

回答

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行的標籤類本身,這是我如何解決這個問題(我也一直在尋找答案)。