kivymd - ValueError: MDLabel._text 只接受 str
问题描述
#当我尝试在 md 标签中添加机器人响应时,它显示错误“ValueError:MDLabel._text 只接受 str 而不是 statment”我不知道如何解决这个问题,如果可以,请提供帮助问题是在最后一个 DEF BOTWORK #
from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.uix.screenmanager import Screen, ScreenManager
from kivymd.uix.dialog import MDDialog
from kivymd.uix.button import MDFlatButton
from kivy.storage.jsonstore import JsonStore
from kivymd.uix.picker import MDDatePicker
from kivy.core.window import Window
from chatterbot.trainers import ListTrainer
from chatterbot import ChatBot
from kivy.properties import StringProperty
Window.size = (305, 500)
helpstr = '''
ScreenManager:
HomeScreen:
WelcomeScreen:
UsernameScreen:
DOB:
MainScreen:
LoginScreen:
ForgotScreen:
Forgot2Screen:
EmailScreen:
HelpScreen:
Chat_Bot:
<HomeScreen>:
name :'homescreen'
Screen:
NavigationLayout:
ScreenManager:
id: screen_manager
Screen:
name: "scr 1"
MDBottomNavigation:
MDBottomNavigationItem:
text: 'Home'
name: 'screen1'
icon: 'home-circle'
BoxLayout:
orientation: 'vertical'
MDToolbar:
title: 'streamer'
left_action_items: [['menu',lambda x: nav_drawer.toggle_nav_drawer()]]
right_action_items: [['magnify', lambda x: app.speed_dial()]]
elevation: 10
Widget:
MDBottomNavigationItem:
text:'notification'
name: 'screen--'
icon: 'bell'
MDBottomNavigationItem:
text:'library'
name: 'screen9'
icon: 'play-speed'
MDList:
OneLineIconListItem:
text: 'downloads'
on_press:
root.manager.current = 'homescreen'
IconLeftWidget:
icon: 'download'
MDBottomNavigationItem:
text: 'account'
name: 'screen2'
icon: 'account-circle'
BoxLayout:
orientation: 'vertical'
canvas.before:
Color:
rgba: 1, 1, 1, 1
Rectangle:
pos: self.pos
size: self.size
source: "data/bgm.jpg"
FloatLayout:
canvas:
Color:
rgb: 1, 1, 1
Ellipse:
id: user_picture
pos: root.width/2 - 150/2, self.height/2 - 500/2 + 150*1.5
size: 150, 150
source: 'data/Man.jpg'
angle_start: 0
angle_end: 360
Line:
width: 2
ellipse: (root.width/2 - 158/2, self.height/2 - 500/2 + 150*1.5, 158, 158, 0, 360)
MDRaisedButton:
text: 'Details'
pos_hint: {'center_x':0.5,'center_y':0.32}
on_press:
app.data_show()
MDLabel:
id:data_name
text:'datascreen'
font_style : 'Button'
halign : 'center'
pos_hint : {'center_y':0.1}
background_normal: 'data/input_line.png'
MDNavigationDrawer:
id: nav_drawer
BoxLayout:
orientation: 'vertical'
Image:
source: ('instagram.jpg')
ScrollView:
MDList:
OneLineIconListItem:
text: 'Home'
on_press:
root.manager.current = 'homescreen'
IconLeftWidget:
icon: 'home'
OneLineIconListItem:
text: 'settings'
on_release:
screen_manager.current = "scr 2"
IconLeftWidget:
icon: 'settings'
OneLineIconListItem:
text: 'login'
on_release:
root.manager.current = 'loginscreen'
IconLeftWidget:
icon: 'login'
OneLineIconListItem:
text: 'Help'
on_release:
root.manager.current = 'helpscreen'
IconLeftWidget:
icon: 'help-circle'
<WelcomeScreen>:
name : 'welcomescreen'
MDLabel:
text:'Welcome to streamer'
font_style: 'Button'
halign: 'center'
pos_hint: {'center_y':0.75}
MDLabel:
text:'Create an account in a few easy steps and enjoy your favourites'
font_style: 'Subtitle1'
halign: 'center'
theme_text_color: "Secondary"
pos_hint: {'center_y':0.55}
MDRaisedButton:
text: 'Next'
pos_hint: {'center_x':0.5,'center_y':0.32}
on_press:
root.manager.current = 'emailscreen'
root.manager.transition.direction = 'left'
MDProgressBar:
value:30
pos_hint:{'center_y' : 0.02}
<EmailScreen>
name:'emailscreen'
MDLabel:
text:'Email Address?'
font_style: 'Button'
halign: 'center'
pos_hint : {'center_y':0.85}
MDTextField:
id:Email_text_fied
pos_hint: {'center_x':0.5,'center_y':0.6}
size_hint: (0.7,0.1)
hint_text : 'Email'
helper_text: 'Required'
helper_text_mode: 'on_error'
icon_right: 'email'
icon_right_color: app.theme_cls.primary_color
required : True
MDIconButton:
id:disabled_button
icon: 'arrow-right'
pos_hint: {'center_x':0.9,'center_y':0.1}
on_press:
root.manager.current = 'usernamescreen'
<UsernameScreen>
name:'usernamescreen'
MDIconButton:
icon: 'arrow-left'
pos_hint: {'center_x':0.1,'center_y':0.1}
on_press:
root.manager.current = 'welcomescreen'
root.manager.transition.direction = 'right'
MDIconButton:
id:disabled_button
disabled: True
icon: 'arrow-right'
pos_hint: {'center_x':0.9,'center_y':0.1}
on_press:
root.manager.current = 'dob'
root.manager.transition.direction = 'left'
MDProgressBar:
value:60
pos_hint: {'center_y':0.02}
MDLabel:
text:'whats your name?'
font_style: 'Button'
halign: 'center'
pos_hint : {'center_y':0.85}
MDTextField:
id:username_text_fied
pos_hint: {'center_x':0.5,'center_y':0.6}
size_hint: (0.7,0.1)
hint_text : 'username'
helper_text: 'Required'
helper_text_mode: 'on_error'
icon_right: 'account'
icon_right_color: app.theme_cls.primary_color
required : True
MDIconButton:
icon:'account-plus'
pos_hint: {'center_x':0.5,'center_y':0.35}
on_press: app.check_username()
<DOB>:
name:'dob'
MDLabel:
text:'whats your birthday'
font_style: 'Button'
halign: 'center'
pos_hint: {'center_y':0.75}
MDRaisedButton:
id:date_picker
text:'Date Picker'
user_font_size : '70sp'
pos_hint : {'center_x':0.5,'center_y':0.6}
on_press:
app.show_date_picker()
MDIconButton:
icon:'arrow-left'
pos_hint: {'center_x':0.1,'center_y':0.1}
on_press: root.manager.current = 'usernamescreen'
MDIconButton:
id: second_disabled
disabled: True
icon:'arrow-right'
pos_hint: {'center_x':0.9,'center_y':0.1}
on_press: root.manager.current = 'mainscreen'
<MainScreen>:
name : 'mainscreen'
MDLabel:
id:profile_name
text:'main screen'
font_style : 'Button'
halign : 'center'
pos_hint : {'center_y':0.7}
MDRaisedButton:
text: "Home"
pos_hint: {"center_x": 0.5, "center_y":0.06}
size_hint: .70,0.03
on_press:
root.manager.current = 'homescreen'
<LoginScreen>:
name : 'loginscreen'
MDIconButton:
icon: "arrow-left"
on_press:
root.manager.current = 'homescreen'
MDLabel:
text: 'streamer'
halign: "center"
pos_hint: {"center_y": .8}
font_style: "H6"
size_hint: (1,1)
MDTextField:
id : data_ok_10
hint_text: "Enter username"
helper_text: "or click on forgot password"
helper_text_mode: "on_focus"
icon_right:"account"
icon_right_color: app.theme_cls.primary_color
pos_hint:{'center_x': 0.5, 'center_y': 0.64}
size_hint_x:None
width:300
MDTextField:
hint_text: "Enter password"
icon_right: "eye-off"
icon_right_color: app.theme_cls.primary_color
pos_hint:{'center_x': 0.5, 'center_y': 0.54}
size_hint_x:None
password: True
width:300
MDRaisedButton:
text: "Login"
pos_hint: {"center_x": 0.5, "center_y":0.48}
size_hint: .7,0.04
on_press:
app.show_data()
MDTextButton:
text: "Forgot password?"
pos_hint: {"center_x":0.5, "center_y":0.04}
on_release:
root.manager.current = 'forgotscreen'
MDTextButton:
text: f"[color=#000000]Don't have an account?[/color] Sign up"
on_press:
root.manager.current = 'welcomescreen'
markup: True
pos_hint: {"center_x":0.5, "center_y":0.33}
<ForgotScreen>:
name :'forgotscreen'
BoxLayout:
orientation: 'vertical'
MDToolbar:
title: 'forgot?'
elevation: 10
Widget:
MDIconButton:
icon: "arrow-left"
on_press:
root.manager.current = 'loginscreen'
MDTextField:
hint_text: "Enter username or email"
helper_text: "or click on forgot username"
helper_text_mode: "on_focus"
icon_right: "bell"
icon_right_color: app.theme_cls.primary_color
pos_hint:{'center_x': 0.5, 'center_y': 0.6}
size_hint_x:None
width:300
MDRaisedButton:
text: "Forgot Password"
on_press:
root.manager.current = 'forgot2screen'
pos_hint: {"center_x": 0.5, "center_y":0.5}
size_hint: .8,0.04
MDTextButton:
text: f"[color=#000000]Don't have an account?[/color] Sign up"
on_press:
root.manager.current = 'welcomescreen'
markup: True
pos_hint: {"center_x":0.5, "center_y":0.23}
MDTextButton:
text: f"[b][color=#000000]Back To[/color] Login[/b]"
on_press:
root.manager.current = 'loginscreen'
markup: True
pos_hint: {"center_x":0.5, "center_y":0.13}
MDLabel:
text: f"[font=Icons] {md_icons['copyright']}[/font]"
markup: True
halign: "center"
pos_hint: {"center_y":0.05}
<Forgot2Screen>:
name :'forgot2screen'
BoxLayout:
orientation: 'vertical'
MDToolbar:
title: 'Account verification'
elevation: 10
Widget:
MDIconButton:
icon: "arrow-left"
on_release:
root.manager.current = 'forgotscreen'
MDLabel:
text: "Account verification"
halign: "center"
pos_hint: {"center_y":.73}
font_style: "Subtitle2"
MDLabel:
text: "We've sent a verification code to your email."
halign: "center"
pos_hint: {"center_y":.67}
font_style: "Body2"
MDTextField:
hint_text: "Enter code"
helper_text: "or click resent code"
password: True
max_text_length: 6
helper_text_mode: "on_focus"
icon_right: "timer-10"
icon_right_color: app.theme_cls.primary_color
pos_hint:{'center_x': 0.5, 'center_y': 0.6}
size_hint_x:None
width:300
MDTextButton:
text: "Resend code"
pos_hint: {"center_x": 0.5, "center_y":0.45}
MDRaisedButton:
text: "Submit"
pos_hint: {"center_x": 0.5, "center_y":0.52}
size_hint: .70,0.3
MDLabel:
text: "Never share your verification code to anyone."
halign: "center"
pos_hint: {"center_y":.4}
font_style: "Caption"
MDLabel:
text: f"[font=Icons] {md_icons['copyright']}[/font] "
markup: True
halign: "center"
pos_hint: {"center_y":.05}
<HelpScreen>:
name :'helpscreen'
BoxLayout:
orientation: 'vertical'
MDToolbar:
title: 'Help'
elevation: 10
Widget:
MDList:
OneLineIconListItem:
text: 'help from Bot'
on_press:
root.manager.current = 'chat_bot'
IconLeftWidget:
icon: 'robot'
OneLineIconListItem:
text: 'customer care'
on_press:
root.manager.current = 'homescreen'
IconLeftWidget:
icon: 'phone-in-talk'
<Chat_Bot>:
name :'chat_bot'
BoxLayout:
orientation: 'vertical'
MDCard:
orientation: "vertical"
padding: "8dp"
size_hint: None, None
size: "900dp", "500dp"
pos_hint: {"center_x": .5, "center_y": .5}
MDLabel:
text: ""
theme_text_color: "Secondary"
size_hint_y: None
height: self.texture_size[1]
id: chat_logs
pos_hint: {'center_x': 0.86, 'center_y': 0.2}
MDLabel:
text: ""
theme_text_color: "Secondary"
size_hint_y: None
height: self.texture_size[1]
id: chat_bot_1
pos_hint: {'center_x': 0.86, 'center_y': 0.2}
MDSeparator:
height: "0.9dp"
MDIconButton:
id: uuuuu_o
icon: 'send'
pos_hint: {'center_x': .64, 'center_y': 0.05}
on_press:
app.botwork()
MDTextFieldRound:
hint_text: "How can i help you"
icon_right_color: app.theme_cls.primary_color
pos_hint: {'center_x': 0.48, 'center_y': 0.2}
size_hint_x: None
width: 200
id: jack_66
'''
class WelcomeScreen(Screen):
pass
class UsernameScreen(Screen):
pass
class DOB(Screen):
pass
class MainScreen(Screen):
pass
class HomeScreen(Screen):
pass
class LoginScreen(Screen):
pass
class ForgotScreen(Screen):
pass
class Forgot2Screen(Screen):
pass
class EmailScreen(Screen):
pass
class HelpScreen(Screen):
pass
class Chat_Bot(Screen):
pass
def esc_markup(msg):
return (msg.replace('&', '&')
.replace('[', '&bl;')
.replace(']', '&br;'))
sm = ScreenManager()
sm.add_widget(WelcomeScreen(name='welcomescreen'))
sm.add_widget(UsernameScreen(name='usernamescreen'))
sm.add_widget(DOB(name='dob'))
sm.add_widget(MainScreen(name='main_screen'))
sm.add_widget(HomeScreen(name='homescreen'))
sm.add_widget(LoginScreen(name='loginscreen'))
sm.add_widget(ForgotScreen(name='forgotscreen'))
sm.add_widget(Forgot2Screen(name='forgot2screen'))
sm.add_widget(EmailScreen(name='emailscreen'))
sm.add_widget(HelpScreen(name='helpscreen'))
sm.add_widget(Chat_Bot(name='chat_bot'))
class NewApp(MDApp):
def build(self):
self.strng = Builder.load_string(helpstr)
return self.strng
def check_username(self):
self.username_text = self.strng.get_screen('usernamescreen').ids.username_text_fied.text
username_check_false = True
try:
int(self.username_text)
except:
username_check_false = False
if username_check_false or self.username_text.split() == []:
cancel_btn_username_dialogue = MDFlatButton(text='Retry', on_release=self.close_username_dialogue)
self.dialog = MDDialog(title='Invalid Username', text="Please input a valid username", size_hint=(0.7, 0.2),
buttons=[cancel_btn_username_dialogue])
self.dialog.open()
else:
self.strng.get_screen('usernamescreen').ids.disabled_button.disabled = False
def close_username_dialogue(self, obj):
self.dialog.dismiss()
def show_date_picker(self):
date_dialog = MDDatePicker(callback=self.get_date, year=1999, month=1, day=1, )
date_dialog.open()
def get_date(self, date):
self.dob = date
self.strng.get_screen('dob').ids.date_picker.text = str(self.dob)
self.strng.get_screen('dob').ids.second_disabled.disabled = False
self.gmail = self.strng.get_screen('emailscreen').ids.Email_text_fied.text
# Storing of DATA
self.store.put('UserInfo', name=self.username_text, )
self.store.put('DOBUSER', dob=str(self.dob))
self.store.put('GMAILUSER', gmail=self.gmail)
def username_changer(self):
self.strng.get_screen('mainscreen').ids.profile_name.text = f"Sign up finished"
def on_start(self):
self.store = JsonStore("userProfile.json")
try:
if self.store.get('UserInfo') != "":
self.username_changer()
self.strng.get_screen('mainscreen').manager.current = 'homescreen'
except KeyError:
self.strng.get_screen('welcomescreen').manager.current = 'welcomescreen'
def show_data(self):
self.password_ok = self.strng.get_screen('loginscreen').ids.data_ok_10.text
if self.password_ok is '':
check_string = 'please enter a vaild username and pasword'
else:
check_string = self.password_ok + ' does not exist'
close_button = MDFlatButton(text="close", on_release=self.close_dialog)
more_button = MDFlatButton(text='more')
self.dialog = MDDialog(title='username and password chek', text=check_string,
size_hint=(0.7, 1),
buttons=[close_button, more_button])
self.dialog.open()
def close_dialog(self, obj):
self.dialog.dismiss()
def data_show(self):
self.strng.get_screen(
'homescreen').ids.data_name.text = f"NAME: {self.store.get('UserInfo')['name']} " \
f"DATE OF BIRTH:{self.store.get('DOBUSER')['dob']} " \
f"MAIL:{self.store.get('GMAILUSER')['gmail']} "
def botwork(self):
bot = ChatBot('Text')
conv = open('english/ai.yml', 'r').readlines()
bot.set_trainer(ListTrainer)
bot.train(conv)
nickname = self.strng.get_screen('mainscreen').ids.profile_name.text = f"{self.store.get('UserInfo')['name']}"
msg = self.strng.get_screen('chat_bot').ids.jack_66.text
self.strng.get_screen('chat_bot').ids.chat_logs.text = nickname + ':' + esc_markup(msg)
response = bot.get_response(msg)
#THE PROBLEM IS AT HERE
self.strng.get_screen('chat_bot').ids.chat_bot_1.text = ('Bot: ', response)
NewApp().run()
**我正在尝试制作 chat_bot_!.text =bot 响应,但它显示错误“ValueError:MDLabel._text 只接受 str 而不是 statment”我不知道如何解决这个问题,如果可以请帮忙
解决方案
尝试这个
response = bot.get_response(msg)
self.strng.get_screen('chat_bot').ids.chat_bot_1.text = 'Bot: ' + str(response)
推荐阅读
- php - 数组 HTML PHP 的传递
- azure - 是否有任何 Azure 服务可以模拟全局 Azure“变量”的概念来保存单个值?
- javascript - 将jquery导入vue Js
- php - Laravel:登录用户的依赖注入?
- three.js - 如何将相机直接移动到 3D 空间中的对象上方?
- flutter - 在 Dart/Flutter 中实现 async / await
- forms - 如何允许 Ctrl+A 在 Windows 窗体文本框中全选(powershell)
- python - 实例值被最新传入值覆盖
- r - y 轴上的一个标签和第二个将其留在顶部。使用带有 2 个变量的 facet_wrap
- mysql - MySQL 创建多个表的过程不起作用(WHILE 循环动态 SQL)