在.kv文件中使用python中制作的kivy小部件



我正在Python中开发一个kivy应用程序。我为UI编写的所有代码都是在KV文件中编写的。我现在有一个非常复杂的Widget,我想在.py文件中设计它。

我现在的问题是,我不知道如何使它在我的.kv文件中可用。我举了一个问题的例子:

我的Python文件:

#main.py
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.widget import Widget
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button
class MyApp(App):
pass
class WindowManager(ScreenManager):
pass
class MainWindow(Screen):
pass
class KvWidget(Widget):
pass
class PythonWidget(Widget):
def build(self):
layout = FloatLayout(size=(self.width, self.height))
test_button = Button(text = "Test button made in PY file",
size_hint = (1, .5),
pos_hint = {"x": 0, "top": .5})
layout.add_widget(test_button)
return layout
if __name__ == "__main__":
MyApp().run()

而我的";my.kv";Kivy文件:

#my.kv
WindowManager:
MainWindow:
<MainWindow>:
KvWidget:
PythonWidget:

<KvWidget>:
FloatLayout:
size: root.width, root.height
Button:
text: "Test Button made in KV file"
size_hint: 1, .5
pos_hint: {"x": 0, "top": 1}

谢谢你的帮助,我是一个初学者,很确定我只是忘记阅读文档中的内容。

首先,您需要向Screenmanager返回。它会检查您的屏幕和孩子。所以,如果你想使用Screenmanager,请像我一样将其返回到你的应用程序类中。之后,kivy小部件就没有构建功能了。如果您创建的函数并没有在小部件自己的函数中,您需要调用这个函数的名称来运行它自己的命令。实际上,你不应该那样创建你的小部件。您可以使用屏幕的功能,如:on_enter。您可以通过任何点击创建此按钮,也可以使用kivy中的时钟功能创建计时器。我选择了on_enter方法。所以我改变了你的设计。请检查下面的最小代码main.py:

#Main.py:
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.widget import Widget
from kivy.uix.button import Button
class WindowManager(ScreenManager):
pass
class MainWindow(Screen):
def on_enter(self, *args):
self.add_widget(Button(text="Test button made in PY file",size_hint=(1, .5),pos_hint={"x": 0, "top": .5}))
class KvWidget(Widget):
pass
class MyApp(App):
def build(self):
return WindowManager()
if __name__ == "__main__":
MyApp().run()

my.kv:

<WindowManager>:
MainWindow:
<MainWindow>:
KvWidget:
<KvWidget>:
FloatLayout:
size: root.width, root.height
Button:
text: "Test Button made in KV file"
size_hint: 1, .5
pos_hint: {"x": 0, "top": 1}

最新更新