繁体   English   中英

使用 ScreenManager 显示 Kivy 和 Python 的两个屏幕时出现问题。 出现黑屏

[英]Trouble using ScreenManager to display two screens with Kivy & Python. Getting a black screen

请原谅凌乱的代码——这里是新手编码器。 我试图有两个屏幕:一个带有网格布局,另一个是空白的。 现在,gridlayout 屏幕上的每个按钮都应该将用户发送到空白屏幕。 最终,我希望每个按钮的 label 被用户替换为 screen2 上的输入字段。 我还在 python 文件中使用 for 循环来创建我的网格布局和 label 相应的按钮。

我的问题是当我运行它编译但给出黑屏的文件时。

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition

class ScreenOne(Screen):
    def makeGrid(self):
        layout = GridLayout(cols = 12)
        flipper = 6
        m = 2
        for r in range(1,17):
            flipper = flipper * -1
            subt = 6 + flipper
            offset = m%2
            for c in range(1,13):
                cols = abs(c-subt) + offset 
                btn = Button(text=(str(r)+ '.'+ str(cols)))
                layout.add_widget(btn)
            m += 1
        return layout

class ScreenTwo(Screen):
    pass
        
class DraftBoardApp(App):
    sm = ScreenManager()
    def build(self):
        DraftBoardApp.sm.add_widget(ScreenOne(name='screen_1'))
        DraftBoardApp.sm.add_widget(ScreenTwo(name='screen_2'))
        return DraftBoardApp.sm

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

My.kv 文件现在实际上是空的

<Screen_One>:
<Screen_Two>:

ScreenOne尚未在您发布的代码中的任何地方 初始化(初始化) ,这就是您没有看到小部件的原因。 makeGrid方法只是这个 class 中定义的常规方法。 为了使事情正常工作,您可以在默认的__init__中定义所有内容(但不返回任何内容),或者在此处调用方法makeGrid以添加返回的实例。

因此第一种方法是这样的,

class ScreenOne(Screen):
    def __init__(self, **kwargs):
        # Make sure you didn't override any
        # superclass rule by calling super on this.
        super().__init__(**kwargs)
        # Define, add etc. whatever you need.
        layout = GridLayout(cols = 12)
        flipper = 6
        m = 2
        for r in range(1,17):
            flipper = flipper * -1
            subt = 6 + flipper
            offset = m%2
            for c in range(1,13):
                cols = abs(c-subt) + offset 
                btn = Button(text=(str(r)+ '.'+ str(cols)))
                layout.add_widget(btn)
            m += 1
        # Don't forget to add to this.
        self.add_widget(layout)

作为旁注,在方法build而不是直接访问 App 的子类(即这里DraftBoardApp )中,您应该将其实例修改为,

self.sm.add_widget(ScreenOne(name='screen_1'))

代替

DraftBoardApp.sm.add_widget(ScreenOne(name='screen_1'))

等等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM