You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy开发英语学习应用 如何实现循环出题持续校验功能

Kivy英语学习应用连续出题实现方案
  • 不要使用while循环实现需求:Kivy是事件驱动GUI框架,手写无限while会阻塞Kivy自身的主事件循环,直接导致应用卡死无响应。你只需要在每次答案校验完成后,主动调用出题逻辑刷新题目即可。
  • 原代码只能校验一次的核心问题:随机索引rand是全局变量,程序启动时仅生成一次,全程不会更新,也没有后续刷新题目的逻辑。

完整修改后代码

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.image import Image
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from random import randrange
from kivy.clock import Clock # 导入时钟调度工具,用于延迟刷新题目


# 动词和对应过去式
verbs = ["arise", "awake", "be", "bear", "beat", "become", "begin", "bend", "bet", "bind", "bite", "bleed", "blow", "break", "breed", "bring", "broadcast", "build", "burn", "burst"]
answers =["arose", "awoke", "was", "bore", "beat", "became", "began", "bent", "bet", "bound", "bit", "bled", "blew", "broke", "bred", "brought", "broadcast", "built", "burnt", "burst"]
vocab_count = 20 # 不要用range作为变量名,会覆盖Python内置range函数

class english_learning(App):
    # 新增:生成新题目的方法
    def generate_new_question(self, dt=None):
        self.current_rand = randrange(0, vocab_count) # 随机索引改为实例属性
        self.greeting.text = verbs[self.current_rand]
        self.answer.text = "" # 清空上一题的输入

    def build(self):
        self.window = GridLayout()
        self.window.cols = 1
            
        self.window.add_widget(Image(source='cat.png'))

        self.greeting = Label()
        self.window.add_widget(self.greeting)

        self.answer = TextInput(multiline=False)
        self.window.add_widget(self.answer)

        self.button = Button(text="check")
        self.button.bind(on_press=self.check_answer)
        self.window.add_widget(self.button)

        self.generate_new_question() # 初始化生成第一道题
        return self.window

    def check_answer(self, instance):
        if self.answer.text == answers[self.current_rand]:
            self.greeting.text = f'yes! {self.answer.text} is the correct verb'
        else:
            self.greeting.text = "no!"
        # 校验完成后延迟1秒刷新下一题,方便用户看到对错提示
        Clock.schedule_once(self.generate_new_question, 1)

if __name__ == "__main__":
    english_learning().run()

核心修改说明

  • 新增generate_new_question实例方法,统一处理生成随机索引、更新题干、清空输入的逻辑,后续需要刷新题目直接调用该方法即可
  • 把原来的全局随机索引改为实例属性current_rand,每次生成新题目时都会更新
  • 修正了原代码中用range作为变量名覆盖Python内置函数的问题
  • 答案校验完成后通过Clock.schedule_once延迟1秒刷新题目,如果不需要延迟可以直接调用self.generate_new_question()

内容的提问来源于stack exchange,提问作者erramidev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:06:04