2017-06-06 139 views
0

我一直在玩kivy库,并一直试图为游戏hang子手[1]创建一个GUI。我试图创建一个用户输入单个字母的TextField,当它们按下return/enter时,而不是textinput.text给出的常量流时,它会更改按钮文本仅限(Kivy/Python)当用户点击输入时,从textinput小部件中存储文本

我已经看过文档和其他计算器Q & A的,它似乎解决方案或者on_text_validate事件或更改我的Clock.schedule.interval设置,但我无法弄清楚如何实现它在我的代码。

我的Python文件:

from kivy.app import App 
from kivy.clock import Clock 
from kivy.uix.widget import Widget 
from kivy.uix.label import Label 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.floatlayout import FloatLayout 
from kivy.uix.textinput import TextInput 


class HangmanBoard(BoxLayout): 
    word = 'hangman' 
    empty = ["_"]*len(word) 

    def update(self, *args): 
     empty_word = self.ids['labelA'] 
     letter_input = self.ids['labelB'] 

     guess = letter_input.text 
     empty_word.text = ' '.join(self.empty) 

     if guess in self.word: 
      for i in range(len(self.word)): 
       if guess == self.word[i]: 
        self.empty[i] = guess 


     print(guess) 

class HangmanApp(App): 

    def build(self): 
     game = HangmanBoard() 
     Clock.schedule_interval(game.update, 1) 
     return game 


if __name__ == '__main__': 
    HangmanApp().run() here 

我千伏文件:

<HangmanBoard>: 
orientation: 'vertical' 

Button: 
    id: labelA 
    font_size: 60 
    size_hint: 1, 0.5 
TextInput: 
    id: labelB 
    font_size: 60 
    pos_hint: {'center_x':0.5} 
    size_hint: 1, 0.5 
    focus: True 
    multiline: False 

回答

0

是的,你可以有时钟事件“当用户停止键入1秒”技工或只是有一个on_text_validate更新按钮的文字,后者更简单,更直接:

TextInput: 
    on_text_validate: 
     labelA.text = self.text 
    # ... 
+0

非常感谢! – SolaOmi

+0

没问题!考虑接受答案。我还有一个“当用户停止输入”机制的项目,所以如果你需要的话,我可以拉起相关的部分。 –

相关问题