基于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
相关产品推荐
相关产品推荐

