在 .kv 文件中使用 python 中制作的 kivy 小部件
Use kivy widget made in python in .kv file
我正在 Python 开发一个 kivy 应用程序。
UI 的所有代码都写在 KV 文件中。
我现在有一个非常复杂的小部件,我想在 .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.It 检查屏幕提供 return,childrens.So 如果您想使用 Screenmanager,return 它在您的应用程序 class 就像我一样。在那之后,kivy widgets 没有 build function.If 你创建的函数没有在 widget 自己的函数中,你需要调用这个函数的名称 运行 它自己的命令。实际上你不应该像这样创建你的小部件 way.You 可以像这样使用屏幕的功能:on_enter。你可以通过任何点击创建这个按钮,或者使用计时器kivy中的时钟功能。我选择了 on_enter method.So 我改变了你的设计。检查下面的最小代码。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}
我正在 Python 开发一个 kivy 应用程序。 UI 的所有代码都写在 KV 文件中。 我现在有一个非常复杂的小部件,我想在 .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.It 检查屏幕提供 return,childrens.So 如果您想使用 Screenmanager,return 它在您的应用程序 class 就像我一样。在那之后,kivy widgets 没有 build function.If 你创建的函数没有在 widget 自己的函数中,你需要调用这个函数的名称 运行 它自己的命令。实际上你不应该像这样创建你的小部件 way.You 可以像这样使用屏幕的功能:on_enter。你可以通过任何点击创建这个按钮,或者使用计时器kivy中的时钟功能。我选择了 on_enter method.So 我改变了你的设计。检查下面的最小代码。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}