簡體   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