[英]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.