Python—如何添加第二个“Python”;屏幕“;我的kivy应用程序?

Python—如何添加第二个“Python”;屏幕“;我的kivy应用程序?,python,window,screen,kivy,Python,Window,Screen,Kivy,注意:我不是程序员,也不知道我应该使用的确切术语。这是一个基本的程序,我不想使用文字“kivy screens”或kivy screen manager 为了解决这个问题,我花了好几个小时在谷歌上到处搜索,结果我的搜索结果很差。我有一个python kivy程序。我已经创建了初始开始屏幕。当用户点击特定游戏时,我希望屏幕清除第一个屏幕上的所有数据,然后在屏幕上放置按钮和标签。几乎就像一个“新”屏幕。当用户选择一个游戏时,我会在屏幕上清除它,但是如果我尝试在这个屏幕上添加按钮,它们就会出现在主屏幕

注意:我不是程序员,也不知道我应该使用的确切术语。这是一个基本的程序,我不想使用文字“kivy screens”或kivy screen manager

为了解决这个问题,我花了好几个小时在谷歌上到处搜索,结果我的搜索结果很差。我有一个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文件:

<MadLib>:
    canvas:
        Color:
            rgba: 0.2, 0.8, 0.2, 1
        Rectangle:
            pos: 0, 0
            size: self.width, self.height


    Button:
        tag: 'exit'
        background_color: 0, 0, 0, 0
        height: 100
        width: 100
        center_x: root.width - self.width / 2
        top: root.top
        on_press: app.stop()
        Image:
            source: r"C:\Users\kraak\Desktop\Python\Python\basicexitbutton.gif"
            top: root.top
            center_x: root.width - self.width / 2
            size_hint_y: None
            height: '96dp'

    Button:
        tag: 'menu'
        background_color: 0, 0, 0, 0
        id: btn
        top: root.top - 10
        center_x: self.width / 2 + 10
        on_release: dropdown.open(self)
        size_hint_y: None
        height: '48dp'
        width: '175dp'
        Image:
            source: r"C:\Users\kraak\Desktop\Python\Python\basicmenubutton.gif"
            top: root.top + 10
            center_x: self.width / 2
            size_hint_y: None
            height: '96dp'

    Widget:
        on_parent: dropdown.dismiss()

    DropDown:

        id: dropdown
        on_select: btn.text = '{}'.format(args[1])

        Button:
            center_x: self.width / 2
            text: 'Browse'
            font_size: '32'
            background_color: 0, 0 ,0, 0
            size_hint_y: None
            height: '48dp'
            on_release: dropdown.select('A')

        Button:
            text: 'Categories'
            font_size: '32'
            background_color: 0, 0 ,0, 0
            size_hint_y: None
            height: '48dp'
            on_release: dropdown.select('B')

        Button:
            text: 'Settings'
            font_size: '32'
            background_color: 0, 0 ,0, 0
            size_hint_y: None
            height: '48dp'
            on_release: dropdown.select('C')

    Button:
        text: 'Game 1'
        font_size: '32'
        background_color: 0, 0 ,0, 0
        size_hint_y: None
        height: '48dp'
        top: root.top / 1.33
        center_x: root.width / 4
        on_press: root.clear_widgets()

    Button:
        text: 'Game 2'
        font_size: '32'
        background_color: 0, 0 ,0, 0
        size_hint_y: None
        height: '48dp'
        top: root.top / 1.66
        center_x: root.width / 4
        on_release: dropdown.select('C')

<Game1>:
    Button:
        id: tst
        text: 'Test'
        font_size: '32'
        background_color: 0, 0 ,0, 0
        size_hint_y: None
        height: '48dp'
        top: root.top
        center_x: root.width / 4
:
画布:
颜色:
rgba:0.2,0.8,0.2,1
矩形:
位置:0,0
尺寸:自宽、自高
按钮:
标签:“退出”
背景颜色:0,0,0,0
身高:100
宽度:100
中心x:root.width-self.width/2
top:root.top
按:app.stop()
图片:
来源:r“C:\Users\kraak\Desktop\Python\Python\basicexitbutton.gif”
top:root.top
中心x:root.width-self.width/2
尺寸提示:无
高度:“96dp”
按钮:
标签:“菜单”
背景颜色:0,0,0,0
id:btn
top:root.top-10
中心x:self.width/2+10
发布时:下拉。打开(自身)
尺寸提示:无
高度:“48dp”
宽度:“175dp”
图片:
来源:r“C:\Users\kraak\Desktop\Python\Python\basicmenubutton.gif”
顶部:root.top+10
中心x:self.width/2
尺寸提示:无
高度:“96dp”
小装置:
在父对象上:下拉列表
下拉列表:
id:下拉列表
on_select:btn.text='{}'。格式(args[1])
按钮:
中心x:self.width/2
文本:“浏览”
字体大小:“32”
背景颜色:0,0,0,0
尺寸提示:无
高度:“48dp”
发布时:下拉列表。选择('A')
按钮:
文本:“类别”
字体大小:“32”
背景颜色:0,0,0,0
尺寸提示:无
高度:“48dp”
发布时:下拉列表。选择('B')
按钮:
文本:“设置”
字体大小:“32”
背景颜色:0,0,0,0
尺寸提示:无
高度:“48dp”
发布时:下拉列表。选择('C')
按钮:
文字:“游戏1”
字体大小:“32”
背景颜色:0,0,0,0
尺寸提示:无
高度:“48dp”
顶部:root.top/1.33
中心x:root.width/4
按:root.clear\u widgets()
按钮:
文字:“游戏2”
字体大小:“32”
背景颜色:0,0,0,0
尺寸提示:无
高度:“48dp”
顶部:root.top/1.66
中心x:root.width/4
发布时:下拉列表。选择('C')
:
按钮:
id:tst
文本:“测试”
字体大小:“32”
背景颜色:0,0,0,0
尺寸提示:无
高度:“48dp”
top:root.top
中心x:root.width/4

当用户点击游戏1时,我希望它跳转到游戏1类,但是它不能,因为程序还不知道它存在。我不知道如何解决这个问题。

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

这是谷歌搜索“奇维屏幕”时的第一个结果,请下次做作业

这里有一个关于如何将现有代码转换为正确使用屏幕的代码的快速教程。考虑如下:KV代码:

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

<Second@Button>:
    text: "I'm second..."
您现在需要一个屏幕管理器。在其中,添加所有要使用的屏幕。我将使它成为根部件。我还将使第一个屏幕上的按钮变为第二个屏幕,反之亦然:

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..."
屏幕管理器:
第一:
第二:
:
名称:“第一屏”
按钮:
文字:“我是第一”
#root.manager.current是一种魔术,它为您提供了当前屏幕管理器
发布时:root.manager.current=“第二屏幕”
:
名称:“第二屏幕”
按钮:
发布时:root.manager.current=“第一个屏幕”
文字:“我是第二……”
就这样!您可以更改转换类型和其他详细信息,请查看

要查看此示例,请运行此.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..."   
            """))
从kivy.base导入runTouchApp
从kivy.lang导入生成器
runTouchApp(Builder.load_字符串(“”)
屏幕管理器:
第一:
第二:
:
名称:“first_screen”#名称类似于id,但仅适用于屏幕管理器
按钮:
文字:“我是第一”
#root.manager.current是一种魔术,它为您提供了当前屏幕管理器
发布时:root.manager.current=“第二屏幕”
:
名称:“第二屏幕”
按钮:
发布时:root.manager.current=“第一个屏幕”
文字:“我是第二……”
"""))

我没有尝试使用文字屏幕。我只需要做一个基本的程序,并希望它尽可能简单。我不是一个有经验的程序员,所以我不知道我应该使用的确切术语。别担心,它非常简单。术语很简单:有一个ScreenManager小部件,它只能包含一个屏幕。然后是一个屏幕,它可以包含您已经拥有的任何小部件。看一些。您无需更改任何代码,只需更改大约10-15行。卡住时回复。谢谢。我想我要试一试。也许它能帮我把程序搞定
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..."   
            """))