【发布时间】:2015-07-10 05:10:48
【问题描述】:
我没有完全理解 python 文件中的类和 kivy 语言是如何交互的。我目前正在修改 Kivy 的 Showcase 示例以增加我的理解。
文件结构
- main.py
- showcase.kv
- data/screens/test.kv
main.py
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
test.kv
<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() 中,并使我的文件和类更有条理。
跟进问题:Kivy class in .py and .kv interaction 2
【问题讨论】:
-
能否请您重新表述您的实际问题?我觉得这里有一个很好的问题,但就目前而言,我很难理解它。
-
我并不太清楚自己到底想要什么,所以很难正确表述,但我希望现在通过这个编辑更清楚。
-
猜想,您想通过代码控制元素,但让
kv尽可能简单明了?您可能想改用ScreenManager,只需定义容器屏幕,并使用代码管理元素。