我并没有完全理解python文件中的类和kivy语言之间的交互方式。我正在修改Kivy的Showcase示例以增加我的理解。
class Testy(BoxLayout):
ttext = 'Bla'
#other code
class ShowcaseScreen(Screen):
fullscreen = BooleanProperty(False)
def add_widget(self, *args):
if 'content' in self.ids:
return self.ids.content.add_widget(*args)
return super(ShowcaseScreen, self).add_widget(*args)
class ShowcaseApp(App):
#code
<Testy>:
orientation: 'vertical'
Label:
text: root.ttext
ShowcaseScreen:
name: 'LearnKanji'
fullscreen: True
#Some ref to <Testy>
我想在Testy()中使用我的代码,因为我打算编写大量代码,针对单个屏幕中发生的事情,我不想让ShowcaseScreen()混乱,因为ShowcaseScreen也意味着对于其他屏幕。
澄清一下,在test.kv中我指的是变量ttext。如果我没有上课Testy(),我会按如下方式进行:
ShowcaseScreen:
name: 'LearnKanji'
fullscreen: True
BoxLayout:
text: root.ttext
然后在main.py中我需要把
class ShowcaseScreen(Screen):
ttext = 'Bla'
然而,由于除了Testy之外的许多屏幕都使用了ShowcaseScreen()类,所以将所有屏幕的所有代码放在这里会使它太乱了。因此,我希望每个屏幕的代码在一个单独的类中。我认为这是更大的代码项目的更好方法。
那么在test.kv文件中调用ShowcaseScreen之后如何引用?这样我就可以将Testy中的代码放在Testy()中,并保持我的文件和类更有条理。
答案 0 :(得分:1)
您可以使用ScreenManager
。看看这里,我改变了一些代码,提供了一个使用ScreenManager将每个屏幕的代码分离到自己的类中的示例。如果有问题,请告诉我。
<强> main.py 强>:
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.properties import ObjectProperty
class Testy(Screen):
ttext = 'Screen 2'
#other code
class ScreenTwo(Screen):
pass
class Manager(ScreenManager):
testy = ObjectProperty(None)
screen_2 = ObjectProperty(None)
class ShowcaseApp(App):
def build(self):
return Manager(transition=FadeTransition())
if __name__ == "__main__":
ShowcaseApp().run()
kv档案:
<Testy>:
BoxLayout:
Button:
text: root.ttext
on_press: root.manager.current = "screen_two"
<ScreenTwo>:
BoxLayout:
Button:
text: "Screen 1"
on_press: root.manager.current = "testy_screen"
<Manager>:
id: screen_manager
testy: testy
screen_2: screen_2
Testy:
id: testy
name: 'testy_screen'
manager: screen_manager
ScreenTwo:
id: screen_2
name: 'screen_two'
manager: screen_manager