簡體   English   中英

Kivy 屏幕未加載

[英]Kivy Screen isn't loading

我正在嘗試使用 Kivy 創建一個簡單的屏幕。

這是我的代碼:

class invoice_screen(Screen):
    def __init__(self, **kwargs):
        super(invoice_screen, self).__init__(**kwargs)

        self._window = BoxLayout(orientation='vertical')

        self._window.add_widget(Label(text="something or another"))

        scroll = ScrollView()
        box = BoxLayout(orientation='vertical')
        top_row = BoxLayout(orientation='horizontal')
        top_row.add_widget(
            Label(
                text="item",
                size_hint=(.8, 1)    
            )
        )
        top_row.add_widget(
            Label(
                text="quantity",
                size_hint=(.2, 1)    
            )
        )
        box.add_widget(bot_row)
        scroll.add_widget(box)
        self._window.add_widget(scroll)

        buttons = BoxLayout(orientation='horizontal')
        button1 = Button(text="Complete!")
        button1.bind(on_release=self.forward)
        button2 = Button(text="Go Back")
        button2.bind(on_release=self.back)
        buttons.add_widget(button1, button2)
        self._window.add_widget(buttons)
         
    def back(self):
        pass

    def forward(self):
        Popup(
            title="Completed",
            content=Label(text="You can close this NOW!"),
            size=(400,400)
        ) 

class app(App):
    def build(self):
        mane_chan = ScreenManager()
        mane_chan.add_widget(invoice_screen(name="invoice"))
        mane_chan.current = "invoice"
        return mane_chan

if __name__ == "__main__":
    app().run()

但是當我運行它時,只顯示 Kivy window。 屏幕中沒有包含任何元素。 甚至沒有任何錯誤。

我不知道我在這里做錯了什么。

您將所有小部件添加到self._window ( BoxLayout ) 但您忘記將此self._window添加到screen ( self )

self.add_widget(self._window)

就這樣。


帶有其他小修復的完整工作代碼 - 請參閱代碼中的注釋

# https://kivy.org/doc/stable/guide/basic.html

#import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen
 
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.scrollview import ScrollView

from kivy.uix.popup import Popup

class InvoiceScreen(Screen):
    
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self._window = BoxLayout(orientation='vertical')
        self.add_widget(self._window)  # <--- need to add `boxlayout` to `screen`

        self._window.add_widget(Label(text="something or another"))

        scroll = ScrollView()
        
        box = BoxLayout(orientation='vertical')
        
        top_row = BoxLayout(orientation='horizontal')
        top_row.add_widget(
            Label(
                text="item",
                size_hint=(.8, 1)    
            )
        )
        top_row.add_widget(
            Label(
                text="quantity",
                size_hint=(.2, 1)    
            )
        )
        box.add_widget(top_row)   # <-- it has to be `top_row` instead of `bot_row`
        
        scroll.add_widget(box)
        self._window.add_widget(scroll)

        buttons = BoxLayout(orientation='horizontal')
        
        button1 = Button(text="Complete!")
        button1.bind(on_release=self.forward)
        
        button2 = Button(text="Go Back")
        button2.bind(on_release=self.back)
        
        #buttons.add_widget(button1, button2)  # <-- wrong
        buttons.add_widget(button1)  # <-- it has to add only one widget
        buttons.add_widget(button2)  # <-- it has to add only one widget
        
        self._window.add_widget(buttons)
        
    def back(self, event):
        pass

    def forward(self, event):
        Popup(
            title="Completed",
            content=Label(text="You can close this NOW!"),
            size=(400,400)
        ).open()   # <-- forgot `.open()`

class app(App):
    def build(self):
        mane_chan = ScreenManager()
        mane_chan.add_widget(InvoiceScreen(name="invoice"))
        mane_chan.current = "invoice"
        return mane_chan

if __name__ == "__main__":
    app().run()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM