Python 基维在巨蟒身上跑得很奇怪

Python 基维在巨蟒身上跑得很奇怪,python,anaconda,kivy,Python,Anaconda,Kivy,我有一个关于kivy的问题,它在anaconda上运行得很奇怪 第一件奇怪的事情:我必须添加到kivy文件中,然后运行它,并从kivy代码的菜单屏幕中删除,然后再次运行该文件,以便我的代码能够像我想要的那样运行。如果我不这样做,代码将给出FactoryException:Unknown class 第二件奇怪的事情是,在我结束kivy并再次运行它之后,它不允许我更改应用程序的屏幕,我必须重新启动shell,并像上面的第一件奇怪的事情那样做,以便它切换屏幕并正常运行 代码如下: from kivy

我有一个关于kivy的问题,它在anaconda上运行得很奇怪

第一件奇怪的事情:我必须添加到kivy文件中,然后运行它,并从kivy代码的菜单屏幕中删除,然后再次运行该文件,以便我的代码能够像我想要的那样运行。如果我不这样做,代码将给出
FactoryException:Unknown class

第二件奇怪的事情是,在我结束kivy并再次运行它之后,它不允许我更改应用程序的屏幕,我必须重新启动shell,并像上面的第一件奇怪的事情那样做,以便它切换屏幕并正常运行

代码如下:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty
kv = Builder.load_file('mymain.kv')

class MainWindow(Screen):
    pass

class SecondWindow(Screen):
    point = ObjectProperty(None)
    note = ObjectProperty(None)
    def pressed(self):
        ''' this fuction is the function of the good action button'''
        point1 = self.point.text
        Note1 = self.note.text
        try:
            point1 = int(point1)
            print("You just got: ",point1)
            print('Note of this action: ')
            print(Note1)
        except:
            if point1 == '':
                print('please enter something')
            else:
                print("point should be a number")
        #print(point1, Note1)
        self.point.text = ""
        self.note.text = ''
        #return grid

    def increased(self):
        ''' this function is to increase the mark'''
        point2 = self.point.text
        try:
            point2 = int(float(point2))+1
            print('increase point is', point2)
            #self.point.text = str(point2)
        except:
            point2 = 1
            print('your point is: ','1')
        self.point.text = str(point2)
    def decreased(self):
        ''' this function decrease the point'''
        point3 = self.point.text
        try:
            point3 = int(float(point3))-1
            print('decrease point is', point3)
            #self.point.text = str(point3)
        except:
            point3 = -1
            print('your point is: ', '-1')
        self.point.text = str(point3)


class MenuScreen(ScreenManager):
    pass

class MyMainApp(App):
    def build(self):
        return kv


if __name__ == '__main__':
    MyMainApp().run()
这是mymain.kv

MenuScreen:
    MainWindow:
    SecondWindow:

<MainWindow>:

    name: "main"

    GridLayout:

        cols: 1

        Button:

            text: 'Good'
            on_release: app.root.current = 'second'
        Button:
            text: 'Bad' #not doing anything yet
<SecondWindow>:

    name: 'second'
    point: point
    note: note
    GridLayout:
        cols: 1
        size: root.width, root.height

        GridLayout:

            cols: 3



            Label:

                text: 'Good Point: '



            TextInput:

                id: point

                multiline: False

            GridLayout:

                cols: 1

                Button:

                    text: 'up'

                    on_press: root.increased()

                Button:

                    text: 'down'

                    on_press: root.decreased()



        Label:

            text: 'Note: '



        TextInput:

            id: note

            multiline: True
        Button:
            text: ' submit'
            on_press: root.pressed()
MenuScreen:
主窗口:
第二窗口:
:
名称:“主要”
网格布局:
科尔斯:1
按钮:
文字:“好”
发布时:app.root.current='second'
按钮:
文字:“糟糕”#还没做任何事情
:
姓名:“第二”
点:点
注:注
网格布局:
科尔斯:1
尺寸:根.宽度,根.高度
网格布局:
科尔斯:3
标签:
文字:“好观点:”
文本输入:
id:点
多行:False
网格布局:
科尔斯:1
按钮:
文字:“向上”
按:root.remented()
按钮:
文字:“向下”
按上:root.reduced()
标签:
正文:“注:”
文本输入:
id:注意
多行:正确
按钮:
文本:“提交”
on_press:root.pressed()

请帮帮我。Idk为什么kivy会这样运行。
谢谢你

问题是你的
mymain.kv
加载了两次。Kivy将自动加载
kv
文件,如果文件命名正确(如您的原样-请参阅),并且您也将通过
Builder.load\u string()
调用加载该文件。解决方法是删除该行:

kv = Builder.load_file('mymain.kv')
并将您的
应用程序
类简化为:

class MyMainApp(App):
    pass
    # def build(self):
    #     return kv

问题是您的
mymain.kv
加载了两次。Kivy将自动加载
kv
文件,如果文件命名正确(如您的原样-请参阅),并且您也将通过
Builder.load\u string()
调用加载该文件。解决方法是删除该行:

kv = Builder.load_file('mymain.kv')
并将您的
应用程序
类简化为:

class MyMainApp(App):
    pass
    # def build(self):
    #     return kv

mymain.kv
更改中:

MenuScreen:
    MainWindow:
    SecondWindow:

:
主窗口:
第二窗口:

mymain.kv
中更改:

MenuScreen:
    MainWindow:
    SecondWindow:

:
主窗口:
第二窗口:

我不认为这是问题所在,因为我以前给它起过不同的名字,同样的问题也会发生,这就是为什么我试着给它起个相同的名字,看看结果是否不同,同样的问题是否发生了。实际上,这很管用,但我不认为这是问题所在,因为我以前给它起过不同的名字,同样的问题也会发生,这就是为什么我试着这么做说出相同的名称,看看结果是否不同,是否出现了相同的问题。实际上,这是第一件奇怪的事情。这是第一件奇怪的事情