首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ScreenManager使用Kivy & Python显示两个屏幕时遇到麻烦。得到一个黑屏幕

使用ScreenManager使用Kivy & Python显示两个屏幕时遇到麻烦。得到一个黑屏幕
EN

Stack Overflow用户
提问于 2022-08-03 02:42:26
回答 1查看 49关注 0票数 0

请原谅乱七八糟的代码--这里是新手编码器。我想要有两个屏幕:一个有网格布局,另一个是空白。现在,网格布局屏幕上的每个按钮都应该将用户发送到空白屏幕。最后,我希望每个按钮的标签都由用户替换,在screen2上有一个输入字段。我还在python文件中使用for循环来创建网格布局并相应地标记按钮。

我的问题是,当我运行该文件时,它会编译,但会显示一个黑屏。

代码语言:javascript
运行
复制
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()

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

代码语言:javascript
运行
复制
<Screen_One>:
<Screen_Two>:
EN

Stack Overflow用户

发布于 2022-08-03 20:50:10

在发布的代码中,ScreenOne并不是初始化(初始化),这就是为什么您没有看到这些小部件的原因。方法makeGrid只是定义在该类中的一个常规方法。要使工作正常,您可以在默认的__init__中定义所有内容(但不要返回任何内容),或者调用makeGrid方法来添加返回的实例。

所以第一种方法是这样的,

代码语言:javascript
运行
复制
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中,您应该修改它的实例,而不是直接访问应用程序的子类(这里是DraftBoardApp),

代码语言:javascript
运行
复制
self.sm.add_widget(ScreenOne(name='screen_1'))

而不是

代码语言:javascript
运行
复制
DraftBoardApp.sm.add_widget(ScreenOne(name='screen_1'))

等。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73215765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档