Я запускаю половину своей программы Kivy - PullRequest
0 голосов
/ 23 октября 2019

Здравствуйте, я разместил свои файлы ниже. Я сталкиваюсь с проблемой запуска только половины моей программы Kivy. Теперь я могу только запустить ScreenManager. Кнопки, созданные в файле KV под <LevelsWindow>, <GameWindow> и <SuccessWindow>, являются единственными кнопками, которые я вижу. При щелчке они работают должным образом (переключаются на каждый экран).

Однако, если я откорректирую свой файл KV, удалив <Touch>:, и все, что меньше FloatLayout:, уменьшит отступ на 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 голосов
/ 30 октября 2019

Для тех, кто может столкнуться с этим, в моем скрипте Python мне пришлось наследовать от FloatLayout вместо Widget. Итак, я изменил свой код с: класс Touch (виджет): на класс Touch (FloatLayout)

...