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

基于Toga和BeeWare的Python安卓聊天机器人应用报错排查请求

修复Toga聊天机器人发送按钮的崩溃问题

核心错误与修复点

  • 错误调用实例属性为方法:mensage方法中,self.usuario_input()和self.mostra_mensagem_te()是错误写法——这两个是Toga控件实例,并非可调用方法,直接访问.value属性即可。
  • 方法参数不匹配:resposta方法定义的参数是widget,但调用时传入的是用户消息字符串,需将参数名改为user_message以匹配传入值。
  • JSON键匹配对象错误:resposta方法中,frases.get(self.mensage.lower(), ...)错误引用了方法对象self.mensage,应使用传入的user_message参数并转为小写。

修正后的完整代码

class EasyEnglishHelp(toga.App):
    def startup(self):
        def conversa(window_twu, widget):
            box_principal_conversa = toga.Box(style=Pack(direction=COLUMN,
                                                         alignment=CENTER,
                                                         flex=1,
                                                         background_color=BEIGE))

            espaco_one = toga.Box(style=Pack(alignment=CENTER,
                                             flex=1))

            entrada_linha = toga.Box(style=Pack(direction=COLUMN,
                                                alignment=CENTER,
                                                padding=100,
                                                background_color=BEIGE))

            entrada_linha_dois = toga.Box(style=Pack(direction=COLUMN,
                                                     alignment=CENTER,
                                                     padding=100,
                                                     background_color=BEIGE))

            box_pe = toga.Box(style=Pack(direction=COLUMN,
                                         width=200,
                                         height=200,
                                         alignment=CENTER,
                                         background_color=BEIGE,
                                         padding=10))

            botao_home_one = toga.Button(icon=toga.Icon("resources/cardapio1.png"),
                                         style=Pack(width=90,
                                                    height=80,
                                                    alignment=CENTER,
                                                    background_color=BEIGE),
                                         on_press=partial(home, self.main_window))

            bottom_container_one = toga.Box(
                children=[botao_home_one],
                style=Pack(direction=ROW,
                           alignment=CENTER,
                           padding=(10, 20)))

            # caixa de entrada de mensagem
            self.usuario_input = toga.TextInput(placeholder="Digite sua mensagem", style=Pack(color=BLACK,
                                                                                         flex=1))
            

            # Area para exibir mensagens
            self.mostra_mensagem_te = toga.MultilineTextInput(readonly=True, style=Pack(color=BLACK,
                                                                                     flex=1))

            # botão de enviar
            self.bot_enviar = toga.Button("Enviar", on_press=self.mensage, style=Pack(width=100))

            box_principal_conversa.add(espaco_one)
            box_principal_conversa.add(entrada_linha_dois)
            box_principal_conversa.add(entrada_linha)
            box_principal_conversa.add(box_pe)

            entrada_linha_dois.add(self.mostra_mensagem_te)
            entrada_linha.add(self.usuario_input)
            entrada_linha.add(self.bot_enviar)

            box_pe.add(bottom_container_one)

            window_twu.content = box_principal_conversa


    def mensage(self, widget):
        user_message = self.usuario_input.value.strip()
        if user_message:
            # Adicionar mensagem do usuário ao chat
            self.mostra_mensagem_te.value += f'Você: {user_message}\n'

            # Resposta do bot
            bot_response = self.resposta(user_message)
            self.mostra_mensagem_te.value += f'Bot: {bot_response}\n'

            # Limpar o campo de entrada
            self.usuario_input.value = ''

    def resposta(self, user_message):
        try:
            # Caminho completo para o arquivo JSON
            json_path = os.path.join(self.paths.app, "resources/Dicionário_frases.json")
            with open(json_path, "r", encoding="utf-8") as arquivo:
                frases = json.load(arquivo)
                # Buscar resposta correspondente
            return frases.get(user_message.lower(), frases.get("default"))
        except FileNotFoundError:
            return "Erro: Arquivo de respostas não encontrado."
        except Exception as e:
            return f"Erro ao processar a mensagem: {e}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:04:50