Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Kivy-过渡之间的黑屏_Python_Kivy - Fatal编程技术网

Python Kivy-过渡之间的黑屏

Python Kivy-过渡之间的黑屏,python,kivy,Python,Kivy,我正试图复制这个,这是在Kivy中完成的(这是全文的结尾) 就在我开始的时候,我注意到在转换之间出现了一个黑屏(它看起来像什么,所以你不必复制粘贴并运行) 为什么会出现黑屏 编辑:我必须在没有按钮的情况下工作 from kivy.app import App from kivy.lang import Builder from kivy.uix.screenmanager import ScreenManager, Screen # Create both screens. Please no

我正试图复制这个,这是在Kivy中完成的(这是全文的结尾)

就在我开始的时候,我注意到在转换之间出现了一个黑屏(它看起来像什么,所以你不必复制粘贴并运行)

为什么会出现黑屏

编辑:我必须在没有按钮的情况下工作

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen

# Create both screens. Please note the root.manager.current: this is how
# you can control the ScreenManager from kv. Each screen has by default a
# property manager that gives you the instance of the ScreenManager used.
Builder.load_string("""
    <MenuScreen>:
    canvas.before:
        Color:
            rgba: 122,255,0,2
        Rectangle:
            pos: self.pos
            size: self.size
    Label:
        text: 'hello'


<SettingsScreen>:
    canvas.before:
        Color:
            rgba: 0,255,0,2
        Rectangle:
            pos: self.pos
            size: self.size
    Label:
        text: 'hello'
""")

# Declare both screens
class MenuScreen(Screen):
    def on_touch_down(self, touch):
        sm.current = 'settings'

class SettingsScreen(Screen):
    def on_touch_down(self, touch):
        sm.current = 'menu'

# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))

class TestApp(App):

    def build(self):
        return sm

if __name__ == '__main__':
    TestApp().run()
从kivy.app导入应用
从kivy.lang导入生成器
从kivy.uix.screenmanager导入screenmanager,屏幕
#创建两个屏幕。请注意root.manager.current:这就是
#您可以从kv控制ScreenManager。默认情况下,每个屏幕都有一个
#属性管理器,为您提供所用ScreenManager的实例。
生成器。加载\u字符串(“”)
:
在以下情况之前:
颜色:
rgba:122255,0,2
矩形:
pos:self.pos
大小:self.size
标签:
短信:“你好”
:
在以下情况之前:
颜色:
rgba:0255,0,2
矩形:
pos:self.pos
大小:self.size
标签:
短信:“你好”
""")
#声明两个屏幕
类菜单屏幕(屏幕):
def on_触控向下(自身,触控):
sm.current='settings'
类别设置屏幕(屏幕):
def on_触控向下(自身,触控):
sm.current='菜单'
#创建屏幕管理器
sm=屏幕管理器()
sm.add_小部件(菜单浏览(name='menu'))
sm.add_小部件(设置屏幕(name='settings'))
类TestApp(应用程序):
def生成(自):
返回sm
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
TestApp().run()
编辑:我已经试过了,但仍然不起作用

<sm>:
    canvas:
        Color:
            rgb: (0, 255, 255)
        Rectangle:
            size: self.size
            pos: self.pos
:
画布:
颜色:
rgb:(0,255,255)
矩形:
大小:self.size
pos:self.pos

该黑色区域是屏幕管理器的画布。如果你不喜欢黑色,那么你可以把它涂成黑色,就像你在屏幕上做的那样;或者将转换类型更改为
nottransition
,以隐藏它


此外,您应该考虑在K-LangString中建立屏幕管理器。

< P>不应该直接使用屏幕子类。相反,您必须首先添加组件(例如按钮或布局),例如使用
RelativeLayout

Builder.load_string("""
<MenuScreen>:
    RelativeLayout:
        canvas.before:
            Color:
                rgba: 122,255,0,2
            Rectangle:
                pos: self.pos
                size: self.size
        Label:
            text: 'hello'


<SettingsScreen>:
    RelativeLayout:
        canvas.before:
            Color:
                rgba: 0,255,0,2
            Rectangle:
                pos: self.pos
                size: self.size
        Label:
            text: 'hello'
""")
Builder.load\u字符串(“”)
:
相对长度:
在以下情况之前:
颜色:
rgba:122255,0,2
矩形:
pos:self.pos
大小:self.size
标签:
短信:“你好”
:
相对长度:
在以下情况之前:
颜色:
rgba:0255,0,2
矩形:
pos:self.pos
大小:self.size
标签:
短信:“你好”
""")

旧版,但如果有人遇到此问题:

为了澄清评论中含糊不清的回答,您需要像绘制屏幕一样绘制屏幕管理器

kvlang中的示例:

ScreenManagement:
    canvas.before:
        Color:
            rgba: 1,1,1,1
        Rectangle:
            size: self.size
            pos: self.pos
    id: screen_manager
    transition: NoTransition()
    Screen1:
    Screen2:
    Settings_:

我该怎么画呢?这是我的第一个Kivy项目,所以对我来说是全新的。@SnuKies您提供了一个代码示例,在其中绘制了一些屏幕。对屏幕管理器也这样做。@jiligeza我真的不能。如果可以,我请你提供代码。我试过的是经过编辑的。但它现在确实起作用了。我是stucked@SnuKies你应该慢慢来,通过编写教程和阅读文档来学习kivy。没有其他方法,但我可以保证它是值得的。但是当使用canvas.after时,这个黑色区域不会显示,只有canvas.before。一定有办法解决它。