【问题标题】:Black screen when I use kivy screen manager使用 kivy 屏幕管理器时出现黑屏
【发布时间】:2016-08-27 08:26:23
【问题描述】:

当我运行此代码时,它显示一个黑屏,但是当我在有关 ScreenManager 的 kivy 文档中使用示例时,它运行良好。我也尝试了这篇帖子https://gist.github.com/tshirtman/d455671401ff4c694306 中的解决方案,但它对我不起作用。

import os

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, SlideTransition
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout


VIEW = os.path.abspath(os.path.join(os.path.dirname(__file__), 'views', 'moorish.kv'))


class RootScreen(Screen):
    pass


class Main(BoxLayout):
    pass


class Header(BoxLayout):
    pass


class SettingsScreen(Screen):
    pass


class SettingsMain(Widget):
    pass


class SettingsHeader(Widget):
    pass


class Container(BoxLayout):
    pass


class Circle(Widget):
    pass


screen_manager = ScreenManager(transition=SlideTransition())
screen_manager.add_widget(RootScreen(name='main'))
screen_manager.add_widget(SettingsScreen(name='settings'))


class WifiApp(App):
    def build(self):
        Builder.load_file(VIEW)
        return screen_manager


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

这是.kv文件

<Header>
    orientation: 'horizontal'
    rows: 1
    cols: 1
    Container:
        canvas:
            # Background
            Color:
                rgba: 1, 1, 1, 0.9
            Rectangle:
                pos: self.pos
                size: self.size
        Circle:
            on_touch_down:
                root.manager.transition.direction = 'right'
                root.manager.current = 'settings'
            id: 'Settings'
            canvas:
                Ellipse:
                    pos: self.x + 30, self.y + 15
                    size: 60, 60
                    source: 'logos/setting.png'

        Circle:
            id: 'Connected'
            canvas:
                Ellipse:
                    pos: self.x - 50, self.y + 15
                    size: 60, 60
                    source: 'logos/connected.png'

        Label:
            text: 'Wi-Fi Remote'
            font_size: '18sp'
            color: 0, 0, 0, .9
            right: 10


<Main>
    cols: 2
    rows: 2
    canvas:
        # Outer Background
        Color:
            rgba: 1, 1, 1, 0.4
        Rectangle:
            pos: self.pos
            size: self.size
    Container:
        canvas:
            # Inner Background
            Color:
                rgba: 1, 1, 1, 0.9
            Rectangle:
                pos: self.center_x - 150, self.center_y - 175
                size: 300, 350
        Circle:
            id: '1'
            canvas:
                Ellipse:
                    pos: self.center_x + 50, self.center_y + 25
                    size: 100, 100
                    source: 'logos/1.png'

        Circle:
            id: '2'
            canvas:
                Ellipse:
                    pos: self.center_x - 75, self.center_y - 100
                    size: 100, 100
                    source: 'logos/2.png'
        Circle:
            id: '3'
            canvas:
                Ellipse:
                    pos: self.center_x - 25, self.center_y + 25
                    size: 100, 100
                    source: 'logos/3.png'

        Circle:
            id: '4'
            canvas:
                Ellipse:
                    pos: self.center_x - 150, self.center_y - 100
                    size: 100, 100
                    source: 'logos/4.png'

<SettingsHeader>
    orientation: 'horizontal'
    rows: 1
    cols: 1
    Container:
        canvas:
            # Background
            Color:
                rgba: 1, 1, 1, 0.9
            Rectangle:
                pos: self.pos
                size: self.size
        Circle:
            id: 'Settings'
            canvas:
                Ellipse:
                    pos: self.x + 30, self.y + 15
                    size: 60, 60
                    source: 'logos/pointer.png'

        Label:
            text: 'Settings'
            font_size: '18sp'
            color: 0, 0, 0, .9
            right: 10


<SettingsMain>
    cols: 2
    rows: 2
    canvas:
        # Outer Background
        Color:
            rgba: 1, 1, 1, 0.4
        Rectangle:
            pos: self.pos
            size: self.size
    Container:
        canvas:
            # Inner Background
            Color:
                rgba: 1, 1, 1, 0.9
            Rectangle:
                pos: self.center_x - 150, self.center_y - 175
                size: 300, 350
        BoxLayout:
            TextInput:

            TextInput:

            Button:
                text: 'Save'


<RootScreen>
    orientation: 'vertical'
    cols: 1
    Header:
        size_hint: 1, 0.15

    Main:
        size_hint: 1, 0.85


<SettingsScreen>
    orientation: 'vertical'
    cols: 1

    SettingsHeader:
        size_hint: 1, 0.15

    SettingsMain:
        size_hint: 1, 0.85

出了什么问题? 提前致谢

【问题讨论】:

    标签: python-2.7 kivy


    【解决方案1】:

    将屏幕管理器定义放在 buildozer 文件加载之后。示例:

    class WifiApp(App):
        def build(self):
            Builder.load_file(VIEW)
            screen_manager = ScreenManager(transition=SlideTransition())
            screen_manager.add_widget(RootScreen(name='main'))
            screen_manager.add_widget(SettingsScreen(name='settings'))
            return screen_manager
    

    你在 kv 文件中也有一些名称错误。

    【讨论】:

    • 是的,它现在可以工作了,谢谢 :) 是的,修复了类名中额外的 _。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    相关资源
    最近更新 更多