首页 > 解决方案 > kivy 错误 - kivy.factory.FactoryException:未知类

问题描述

所以这是我的 main.py 代码-

import pyaudio
import speech_recognition as sr
import pyttsx3
from playsound import playsound
import kivy
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.properties import ObjectProperty
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.widget import Widget
from kivy.graphics import Rectangle
from kivy.graphics import Color
from kivy.uix.image import Image
from kivy.lang import Builder
kv = Builder.load_file('audibuddy.kv')

class MainWindow(Screen,FloatLayout):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.add_widget(Touch())
class speechtotext(Screen):
    pass
class texttospeech(Screen):
    pass
class WindowManager(ScreenManager):
    pass

class Touch(Widget):            
    def on_touch_down(self,touch):
        print("Mouse down",touch)
    def on_touch_move(self,touch):
        print("Mouse move",touch)
    def on_touch_up(self,touch):
        print("Mouse up",touch)

        

class Audibuddy(App):
    
    def build(self):
        return kv
if __name__  ==  "__main__":
    Audibuddy().run()

这是我的 .kv 文件-

WindowManager:
    MainWindow:
    speechtotext:
    texttospeech:
<MainWindow>:
    GridLayout:
        Button:
            font_size: 40
            color: 1,1,1,1
    
    

    
    
    canvas:
        Color:
            rgba:0.16862745098,0.16862745098,0.16862745098,1
        Rectangle:
            pos:self.pos
            size :self.size
    BoxLayout:
        pos_hint:{'top':1.456}
        size_hint:2,0.57
            
        canvas:
            Color:
                rgba:0.09803921568,0.13725490196,0.17647058823,1
            Rectangle:
                pos:self.pos
                size:self.size
                    
           
    BoxLayout:
        pos_hint:{'left':1324,'top':1.44}
        Image:
            source:'image-removebg-preview(6).png'
            allow_strech:True
            keep_ratio:False
                 
    Button:
        id:settings_btn
        background_normal:"image-removebg-preview(10).png"
        background_down:"image-dark.png"
        allow_strech:True
        keep_ratio:False
        pos_hint:{"top":1,"right":0.99}
        size_hint: 0.09,0.09
                                            
    Label:
        text:"AudiBuddy"
        pos_hint:{"left":1, "top":1}
        font_size:40
    Button:
        id:speechtotext_btn
        text:"Speech to Text"
        pos_hint:{"x":0.15,"top":0.7}
        size_hint: 0.7,0.1
        background_colour:0.3,0.2,0,5,1
    Button:
        id:texttospeech_btn
        text:"Text to Speech"
        pos_hint:{"x":0.15,"top":0.55}
        size_hint: 0.7,0.1
    Button:
        id:exitapp_btn
        text:"Exit Application"
        pos_hint:{"x":0.15,"top":0.4}
        size_hint: 0.7,0.1
<speechtotext>:
<texttospeech>:

它给了我这个错误:

File "C:\Users\admin_temp\Documents\GitHub\audibuddy\main.py", line 16, in <module>
     kv = Builder.load_file('audibuddy.kv')
   File "D:\Program Files\anaconda\lib\site-packages\kivy\lang\builder.py", line 306, in load_file
     return self.load_string(data, **kwargs)
   File "D:\Program Files\anaconda\lib\site-packages\kivy\lang\builder.py", line 404, in load_string
     widget = Factory.get(parser.root.name)(__no_builder=True)
   File "D:\Program Files\anaconda\lib\site-packages\kivy\factory.py", line 146, in __getattr__
     raise FactoryException('Unknown class <%s>' % name)
 kivy.factory.FactoryException: Unknown class <WindowManager>

我无法弄清楚我的代码有什么问题。我是 kivy 的新手,这是我的第一个应用程序。我正在尝试将我之前设计的主窗口 ui 放在 MainWindow 类中。另外,任何人都可以快速告诉答案,因为我明天必须提交项目。

编辑:我对代码进行了一些编辑,现在它看起来像这样 main.py

import pyaudio
import speech_recognition as sr
import pyttsx3
from playsound import playsound
import kivy
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.properties import ObjectProperty
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.widget import Widget
from kivy.graphics import Rectangle
from kivy.graphics import Color
from kivy.uix.image import Image
from kivy.lang import Builder
kv = Builder.load_file('audibuddy.kv')

class Touch(Widget):            
    def on_touch_down(self,touch):
        print("Mouse down",touch)
    def on_touch_move(self,touch):
        print("Mouse move",touch)
    def on_touch_up(self,touch):
        print("Mouse up",touch)
class MainWindow(Screen):
    pass
class speechtotext(Screen):
    pass
class texttospeech(Screen):
    pass
class WindowManager(ScreenManager):
    pass



class Audibuddy(App):
    
    def build(self):
        return kv
if __name__  ==  "__main__":
    Audibuddy().run()

和 .kv 文件 -

WindowManager:
    MainWindow:
    speechtotext:
    texttospeech:
<MainWindow>:
    Button:
            font_size: 40
            color: 1,1,1,1
    
    

    
    
    canvas:
        Color:
            rgba:0.16862745098,0.16862745098,0.16862745098,1
        Rectangle:
            pos:self.pos
            size :self.size
    BoxLayout:
        pos_hint:{'top':1.456}
        size_hint:2,0.57
            
        canvas:
            Color:
                rgba:0.09803921568,0.13725490196,0.17647058823,1
            Rectangle:
                pos:self.pos
                size:self.size
                    
           
    BoxLayout:
        Label:
            text:"audibuddy"
            pos_hint{"top":1,"left":1}
        
                 
    Button:
        id:settings_btn
        background_normal:"image-removebg-preview(10).png"
        background_down:"image-dark.png"
        allow_strech:True
        keep_ratio:False
        pos_hint:{"top":1,"right":0.99}
        size_hint: 0.09,0.09
                                            
    Label:
        text:"AudiBuddy"
        pos_hint:{"left":1, "top":1}
        size_hint:10,10
        font_size:40
    Button:
        id:speechtotext_btn
        text:"Speech to Text"
        pos_hint:{"x":0.15,"top":0.7}
        size_hint: 0.7,0.1
        background_colour:0.3,0.2,0,5,1
    Button:
        id:texttospeech_btn
        text:"Text to Speech"
        pos_hint:{"x":0.15,"top":0.55}
        size_hint: 0.7,0.1
    Button:
        id:exitapp_btn
        text:"Exit Application"
        pos_hint:{"x":0.15,"top":0.4}
        size_hint: 0.7,0.1
<speechtotext>:
<texttospeech>:

但现在我得到一个不同的错误 -

File "C:\Users\admin_temp\Documents\GitHub\audibuddy\main.py", line 16, in <module>
     kv = Builder.load_file('audibuddy.kv')
   File "D:\Program Files\anaconda\lib\site-packages\kivy\lang\builder.py", line 306, in load_file
     return self.load_string(data, **kwargs)
   File "D:\Program Files\anaconda\lib\site-packages\kivy\lang\builder.py", line 373, in load_string
     parser = Parser(content=string, filename=fn)
   File "D:\Program Files\anaconda\lib\site-packages\kivy\lang\parser.py", line 402, in __init__
     self.parse(content)
   File "D:\Program Files\anaconda\lib\site-packages\kivy\lang\parser.py", line 511, in parse
     objects, remaining_lines = self.parse_level(0, lines)
   File "D:\Program Files\anaconda\lib\site-packages\kivy\lang\parser.py", line 614, in parse_level
     _objects, _lines = self.parse_level(
   File "D:\Program Files\anaconda\lib\site-packages\kivy\lang\parser.py", line 674, in parse_level
     if current_property[:3] == 'on_':
 TypeError: 'NoneType' object is not subscriptable

标签: pythoncompiler-errorskivykivy-languagekivymd

解决方案


朋友不要这样做

    class Audibuddy(App):

        def build(self):
            return kv

你需要做的是这只是从那里删除构建功能

    class Audibuddy(App):

        pass 

如果这不起作用,那么只需制作一个与您的项目同名的kv文件并做同样的事情,我希望这会有所帮助,并且对于糟糕的解释很抱歉


推荐阅读