Python如何向kivy应用程序添加第二个“screen”?

2024-06-02 22:02:12 发布

您现在位置:Python中文网/ 问答频道 /正文

注意:我不是程序员,也不知道我应该使用的确切术语。这是一个基本的程序,我不想使用文字“kivy屏幕”或kivy屏幕管理器。在

我花了好几个小时在谷歌上搜索,试图解决这个问题,但我没找到答案。我有一个python kivy程序。我已经创建了初始开始屏幕。当用户点击一个特定的游戏时,我希望屏幕清除第一个屏幕上的所有数据,然后在屏幕上放置按钮和标签。就像一个“新”屏幕。当用户选择一个游戏时,我把它放在屏幕上,但是如果我尝试在这个屏幕上添加按钮,它们就会出现在主屏幕上。在

这是我的python代码:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.dropdown import DropDown

class MadLib(Widget):
    pass

class MadlibApp(App):
    def build(self):
        return MadLib()

app = MadlibApp()

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

这是我的.kv文件:

^{pr2}$

当用户点击游戏1,我想它跳到游戏1类,但它不能,因为程序还不知道它存在。我不知道该怎么解决这个问题。在


Tags: 用户fromimport程序app游戏屏幕widget
1条回答
网友
1楼 · 发布于 2024-06-02 22:02:12

你说的是屏幕,但似乎没有使用真正的kivy屏幕。您需要有一个ScreenManager,然后创建单独的Screen对象,您可以在其中放置小部件。在

这是你搜索“KivyScreens”的第一个结果,下次请做你的功课。在

下面是一个快速教程,介绍如何将现有代码转换为正确使用屏幕的代码。假设您有以下.kv代码:

<First@Button>:
    text: "I'm first"

<Second@Button>:
    text: "I'm second..."

你希望第一个按钮在一个屏幕上,第二个按钮在另一个屏幕上。首先,把它们变成一个Screen。通常您只需将根小部件更改为一个屏幕,然后将所有其他小部件移动到屏幕中。该示例如下所示:

^{pr2}$

你现在需要一个屏幕管理器。在其中,添加您将要使用的所有屏幕。我将使它成为根小部件。我还将使按第一个屏幕上的按钮变为第二个屏幕,反之亦然:

ScreenManager:
    First:
    Second:

<First@Screen>:
    name: "first_screen"
    Button:
        text: "I'm first"
        # root.manager.current is magic that gives you the current screen manager
        on_release: root.manager.current = "second_screen"

<Second@Screen>:
    name: "second_screen"
    Button:
        on_release: root.manager.current = "first_screen"
        text: "I'm second..."

就这样!您可以更改转换类型和其他详细信息,请查看docs。在

要查看此示例,请运行以下.py文件:

from kivy.base import runTouchApp
from kivy.lang import Builder

runTouchApp(Builder.load_string("""
ScreenManager:
    First:
    Second:

<First@Screen>:
    name: "first_screen" # a name is like an id but only for the screen manager
    Button:
        text: "I'm first"
        # root.manager.current is magic that gives you the current screen manager
        on_release: root.manager.current = "second_screen"

<Second@Screen>:
    name: "second_screen"
    Button:
        on_release: root.manager.current = "first_screen"
        text: "I'm second..."   
            """))

相关问题 更多 >