from kivy.app import App
from kivy.uix.popup import Popup
from kivy.uix.widget import Widget
from kivy.uix.dropdown import DropDown
class MyPracticeApp(App):
def build(self):
return Debit()
class Debit(Widget):
def debit(self):
return Hello()
class Hello(Widget):
pass
if __name__ == "__main__":
MyPracticeApp().run()
<Debit>
Button:
text : 'popup'
size_hint : 0.2,0.2
on_press : root.debit()
<Hello>:
Button:
text : 'popup2'
size_hint : 0.2,0.2
# on_press : root.debit()
弹出一个按钮,当我按下该按钮时,我正在调用debit()
函数。在借记功能内,我正在调用Hello()
,但无法从此类中获得任何东西。我在做什么错了?
每当我单击按钮时,我都想要一个新屏幕,但没有屏幕导航。我该怎么做呢 ?
答案 0 :(得分:1)
您可以为此使用ScreenManager
。
一个小例子:
from kivy.app import App
from kivy.lang import Builder
KV = """
#:import NoTransition kivy.uix.screenmanager.NoTransition
BoxLayout:
orientation: "vertical"
Label:
text: "top"
ScreenManager:
id: sm
transition: NoTransition()
Screen:
name: "screen1"
Button:
text: "screen 2"
on_release: sm.current = "screen2"
Screen:
name: "screen2"
Button:
text: "screen 1"
on_release: sm.current = "screen1"
Label:
text: "bottom"
"""
class TestApp(App):
def build(self):
return Builder.load_string(KV)
TestApp().run()
答案 1 :(得分:0)
奇异果工厂的概念是什么
在项目中的任何位置(例如kv文件或Python脚本)使用关键字Factory
时,它将自动注册任何类或模块并实例化它们。
以下示例说明在 kv 文件中使用Factory
来注册和实例化Popup
小部件 Hello 。 Python脚本中没有 Hello 的类定义,也没有方法debit()
的定义。
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
Builder.load_string("""
#:import Factory kivy.factory.Factory
<Debit>:
Button:
text : 'popup'
size_hint : 0.2,0.2
on_press : Factory.Hello().open()
<Hello@Popup>:
title: 'Popup2'
auto_dismiss: False
BoxLayout:
orientation: 'vertical'
Label:
text: 'Hello Kivy'
Button:
text : 'Close Popup'
size_hint : 1,0.2
on_press : root.dismiss()
""")
class Debit(Widget):
pass
class MyPracticeApp(App):
def build(self):
return Debit()
if __name__ == "__main__":
MyPracticeApp().run()
弹出一个按钮,当我按下该按钮时, debit()函数。在借记函数中,我正在调用Hello(),但是 我不能从这堂课上得到任何东西。我在做什么错了?
第二个按钮未显示,因为该应用程序没有关于如何处理实例化对象Hello
的说明,该对象包含一个子控件Button
。
解决方案之一是使用add_widget()
函数添加新对象。
def debit(self):
return self.add_widget(Hello())
每当我单击按钮时,我都想要一个新屏幕,但没有屏幕 导航。我该怎么办?
您可以使用Kivy Popup
小部件。
from kivy.app import App
from kivy.uix.popup import Popup
from kivy.uix.widget import Widget
from kivy.lang import Builder
Builder.load_string("""
<Debit>:
Button:
text : 'popup'
size_hint : 0.2,0.2
on_press : root.debit()
<Hello>:
title: 'Hello Popup2'
auto_dismiss: False
Button:
text : 'Close Popup'
size_hint : 0.2,0.2
on_press : root.dismiss()
""")
class Debit(Widget):
def debit(self):
return Hello().open()
class Hello(Popup):
pass
class MyPracticeApp(App):
def build(self):
return Debit()
if __name__ == "__main__":
MyPracticeApp().run()