2016-08-23 45 views
0

我正在嘗試使計時器更新標籤以查看當前剩餘時間量。我有一個按鈕,當你按下時應該啓動2分鐘定時器。由於某種原因,標籤不會更新。我這樣做有什麼問題嗎?kivy中的標籤不會在while循環中更新

這裏是我的代碼:

import time 

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.screenmanager import ScreenManager, Screen 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.button import Button 
from kivy.uix.label import Label 


Builder.load_string(""" 
#:import sla kivy.adapters.simplelistadapter 
#:import label kivy.uix.label 
<ListItemButton>: 
    selected_color: 0, 0, 1, 1 
    deselected_color: 0, 0, 0, 1 

<MenuScreen>: 
    FloatLayout: 
     #cols: 2 
     #rows: 2 
     size: 800,480 
     Label: 
      id: output 
      text: "0 min 0 s" 
      font_size: 60 
      size_hint: None, None 
      size: 400, 100 
      pos: 200,425 
     Button: 
      id: statheader 
      text: "2 min" 
      font_size: 40 
      size_hint: None, None 
      size: 600,100 
      pos: 150,800 
      background_color: 0,0,1,1 
      on_press: root.startTimer(int(2)) 

""") 

class MenuScreen(Screen): 
    tww = 0 
    def startTimer(self, what): 
     self.tww = what*60 
     while self.tww > 0: 
      minute = self.tww/60 
      print(minute) 
      second = self.tww - minute*60 
      print(second) 
      self.ids.output.text = str(minute) + " min " + str(second) + " s" 
      self.tww -= 1 
      time.sleep(1) 

sm = ScreenManager() 
menu_screen = MenuScreen(name='menu') 
sm.add_widget(menu_screen) 

class TestApp(App): 

    def build(self): 
     return sm 

if __name__ == '__main__': 
    TestApp().run() 

有沒有別的東西,self.ids.output.text應該是什麼?

回答

1

Kivy的圖形無法更新,直到您的while循環結束 - 在循環過程中,只有循環的內容運行(重複),並且Kivy的正常功能被阻止。

你應該改爲使用Clock.schedule_interval每幀運行計算而不阻塞其他函數,或者在線程中運行while循環。

+0

無賴。感謝你的回答 – fastmhc