我正在运行Kivy程序的一半

时间:2019-10-23 14:50:24

标签: python python-2.7 kivy kivy-language

您好,我已将文件放在下面。我遇到了只让我的Kivy程序运行一半的问题。现在,我只能让ScreenManager运行。我在KV文件的<LevelsWindow><GameWindow><SuccessWindow>下创建的按钮是唯一看到的按钮。单击它们可以正常工作(切换到每个屏幕)。

但是,如果我通过移除<Touch>:并让FloatLayout:下的所有内容来调整我的KV文件,则将缩进量减小1个制表符大小,然后递增WindowManager:和下面的三行按一个标签大小。我的代码将运行FloatLayout部分,并在单击时显示按钮(1-10)以及打印“按下的#”,但ScreenManager部分不再起作用。该按钮出现,但按下后什么也没发生。

我相信我需要在某处添加add_widget,但不确定。有人可以指导我做错什么以及如何解决吗?

file:my.kv

#:kivy 1.11.1
<Button>:
    font_size:25
    size_hint: .1, .1

<Touch>:
    FloatLayout:

        Button:
            id:btn1
            pos_hint:{"x":.25, "top":1}
            text:"1"
            on_press:app.pressed(self)

        Button:
            pos_hint:{"x":.35, "top":1}
            text:"2"
            on_press:app.pressed(self)

        Button:
            pos_hint:{"x":0.45, "top":1}
            text:"3"
            on_press:app.pressed(self)

        Button:
            pos_hint:{"x":0.55, "top":1}
            text:"4"
            on_press:app.pressed(self)

        Button:
            pos_hint:{"x":0.65, "top":1}
            text:"5"
            on_press:app.pressed(self)

        Button:
            pos_hint:{"x":0.25, "y":0.8}
            text:"6"
            on_press:app.pressed(self)

        Button:
            pos_hint:{"x":0.35, "y":0.8}
            text:"7"
            on_press:app.pressed(self)

        Button:
            pos_hint:{"x":0.45, "y":0.8}
            text:"8"
            on_press:app.pressed(self)

        Button:
            pos_hint:{"x":0.55, "y":0.8}
            text:"9"
            on_press:app.pressed(self)

        Button:
            pos_hint:{"x":0.65, "y":0.8}
            text:"10"
            on_press:app.pressed(self)

WindowManager:
    LevelsWindow:
    GameWindow:
    SuccessWindow:

<LevelsWindow>:
    name: "levels"
    Button:
        text:"Go to Gameboard"
        on_press: app.root.current = "board"

<GameWindow>:
    name: "board"
    Button:
        text:"right or wrong"
        on_press: app.root.current = "correct"

<SuccessWindow>:
    name: "correct"
    Button:
        text: "Go Home"
        on_press: app.root.current = "levels"

file:Myapp.py

import kivy

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen

class LevelsWindow(Screen):
    pass

class GameWindow(Screen):
    pass

class SuccessWindow(Screen):
    pass

class WindowManager(ScreenManager):
    pass

class Touch(Widget):
    def on_touch_down(self, Touch):
        pass

    def on_touch_move(self, Touch):
        pass

    def on_touch_up(self, Touch):
        pass

kv = Builder.load_file("my.kv")

class MyApp(App):
    def pressed(self, instance):
        name = instance.text
        print "pressed " + name

    def build(self):
        return kv

if __name__=='__main__':
    MyApp().run()

1 个答案:

答案 0 :(得分:0)

对于那些可能遇到此问题的人,在我的python脚本中,我必须继承自FloatLayout而不是Widget。因此,我将代码从以下类别更改:Touch(widget)类:Touch(FloatLayout)