2016-06-12 161 views
0

我試圖讓用戶輸入一個時間,當他們啓動計時器時,用戶插入的時間將從該輸入時間開始倒計時。函數只需要2個參數(1給出)kivy定時器

但是我得到的錯誤updatetimer()究竟需要兩個參數(1給出)

什麼是從輸入返回值,以便它可以在整個腳本的其餘部分中使用的最佳方法。

這是我的工作代碼:

#!/usr/bin/kivy 
import kivy 

from random import random 
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 
from kivy.uix.popup import Popup 
from random import random 
from random import choice 
from kivy.properties import StringProperty 
import time 
from kivy.clock import Clock 

from functools import partial 


check=0 

Builder.load_string(""" 
<MenuScreen>: 
    GridLayout: 
     cols: 1 
     TextInput: 
      id: ti 
     Button: 
      text: 'do something!' 
      on_press: root.updatetimer(ti.text) 
     Button: 
      id: btn_0 
      text: "press me to start timer" 
      on_press: root.val0() 
     Label: 
     text:'timer' 
    Label: 
      id: timer 
      text:str(30) 
""") 

class MenuScreen(Screen): 
    def updatetimer(self,timeup): 
     return timeup 


    def val0(self): 
     global check 
     if(check==0): 
      check=check+1 
      Clock.schedule_interval(partial(my_callback, self), 1) 

test = MenuScreen() 

def my_callback(screen, dt): 
    t = test.updatetimer() 
    t -= 1 
    screen.ids.timer.text = str(t) 

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

class TestApp(App): 

    def build(self): 
     return sm 

預先感謝您的建議

+0

在你的函數'my_callback(屏幕,DT)'你有下面的語句:'T =試驗。 updatetimer()'。對象'test'被認爲是第一個參數('self'),但你仍然有'timeup'。所以錯誤是有道理的 – VlassisFo

+0

什麼應該t = test.updatetimer()被改變爲使得t等於用戶輸入的時間? – fastmhc

回答

1

首先,我會整理一下代碼,並保留方法名有點更具描述性,並在課堂內部。

Builder.load_string(""" 
<MenuScreen>: 
    GridLayout: 
     cols: 1 
     TextInput: 
      id: ti 
     Button: 
      id: btn_0 
      text: "press me to start timer" 
      on_press: root.startTimer(int(ti.text)) 
     Label: 
      id: output 
      text: "Here" 
""") 

class MenuScreen(Screen): 
    time = 0 

    def printTime(self, t): 
     self.ids.output.text = str(t) 

    def tick(self, *largs): 
     self.time -= 1 
     self.printTime(self.time) 

    def startTimer(self, t): 
     self.printTime(t) 
     self.time = t 
     Clock.schedule_interval(partial(self.tick), 1) 

這裏我們有3個類的方法,一個是在開始時調用,一個是每次迭代,另一個是打印幫助函數。當然,這個計數器不會停在0,這可能是你想要的,但我會把這部分留給你。

請記住,類中的方法將通過self作爲它們的第一個參數。我想看看Clock.schedule_interval方法做什麼,如果你想最終取消:

https://kivy.org/docs/api-kivy.clock.html#kivy.clock.ClockBase.schedule_interval

相關問題