首页 > 解决方案 > Kivy 在 anaconda 上跑得很奇怪

问题描述

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

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

第二个奇怪的事情是,在我结束 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()

请帮我。不知道为什么 kivy 会这样跑。
谢谢

标签: pythonanacondakivy

解决方案


变化中mymain.kv

MenuScreen:
    MainWindow:
    SecondWindow:

<MenuScreen>:
    MainWindow:
    SecondWindow:

推荐阅读