当按钮点击python代码时,Kivy Screen不会改变

时间:2018-02-13 22:41:58

标签: python kivy

我有一个用python文件制作的按钮,我一直在尝试制作它,以便将屏幕从一个屏幕更改为另一个屏幕。

import processing.sound.*;

SoundFile file;
String audioName = "CantinaSong.mp3";
String path;

void draw() {
  path = sketchPath (audioName);
  file = new SoundFile(this, path);
  file.play();
}

当我单击按钮时,它会打印“Test1”和“Test2”而不更改屏幕。对不起,如果这对其他人来说真的很明显,但我不知道如何修复它,有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

如果你发布MCVE会更好,但我自己做了一个。以下是如何做到的:

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen


def callbackTo2(instance):
    sm.current="ScreenTwo"

def callbackTo1(instance):
    sm.current="ScreenOne"

class ScreenOne(Screen):
    def __init__(self, *args):
        super(ScreenOne, self).__init__(name='ScreenOne')
        self.add_widget(Button(text='Switch To Screen Two', size_hint=(0.1, 0.1), on_press=callbackTo2, pos_hint={"x":0.90, "top":1.0}))


class ScreenTwo(Screen):
    def __init__(self, *args):
        super(ScreenTwo, self).__init__(name='ScreenTwo')
        self.add_widget(Button(text='Switch To Screen One', size_hint=(0.1, 0.1), on_press=callbackTo1, pos_hint={"x":0.90, "top":1.0}))


sm = ScreenManager()
class ScreenPlayApp(App):
    def build(self):
        sm.add_widget(ScreenOne())
        sm.add_widget(ScreenTwo())
        return sm


if __name__ == '__main__':
    app = ScreenPlayApp()
    app.run()

请注意,只有一个ScreenManager实例,所有屏幕最初都可以添加到ScreenManager,并使用sm.current=切换屏幕。此外,您可以使用__init__()方法构建屏幕。使用on_enter会在每次显示屏幕时重建屏幕成员。此外,你不能同时使用'尺寸'和' size_hint'对于相同的小部件,除非您要设置' size_hint'到'无'。