gpt4 book ai didi

python-3.x - 如何在 kivy 中正确导入自定义小部件

转载 作者:行者123 更新时间:2023-12-03 21:16:44 24 4
gpt4 key购买 nike

我有一个小部件(W2),由其他小部件(W1)组成。每个都有一个对应的 .kv 文件,如下所示。运行 main.py,我希望看到带有两个标签的黑色背景,垂直堆叠。相反,我将两个标签叠在一起,所以出了点问题。

kivy.factory.FactoryException: Unknown class <W1>

所以我想,“也许我应该在 w2.py 中导入 w1.py,即使它没有在 py 文件中明确使用?那......有点工作。我把两个标签放在一起,如下图所示.

enter image description here

我究竟做错了什么?编写预期由另一个小部件导入/包含的小部件的正确方法是什么?以及正确的导入方式?

我尝试使用 Builder.load_file()在 .py 文件中,只是导入 .py 文件,但结果相似。

w1.py:
import kivy
from kivy.properties import StringProperty
from kivy.uix.widget import Widget
kivy.require('1.10.0')

class W1(Widget):
text = StringProperty('default')

def __init__(self, **kwargs):
super(W1, self).__init__(**kwargs)

w1.kv:
#:kivy 1.10.0

<W1>:
text:
Label:
text: root.text

w2.py:
import kivy from kivy.uix.boxlayout import BoxLayout
# from w1 import W1 # added this to get a working, but the incorrect layout
kivy.require('1.10.0')

class W2(BoxLayout):

def __init__(self, **kwargs):
super(W2, self).__init__(**kwargs)

w2.kv:
#:kivy 1.10.0
#:include w1.kv

<W2>:
orientation: 'vertical'
W1:
text: 'w1.1'
W1:
text: 'w1.2'

main.py:
import kivy
from w2 import W2
from kivy.app import App
kivy.require('1.10.0')


class mainApp(App):

def build(self):
pass


if __name__ == '__main__':
mainApp().run()

main.kv:
#:kivy 1.10.0
#:include w2.kv

W2:

编辑
重叠已解决,但可能不正确。我让 W1 继承自 BoxLayout 而不是 Widget,我认为可能在基本 Widget 类中缺少最小高度/宽度属性。

我仍然不确定处理导入具有成对 .kv 文件的小部件的“正确”方法是什么,或者究竟为什么当我从 Widget 继承时我得到重叠的小部件;只是猜测。
enter image description here

最佳答案

为什么要为此使用两个不同的 kv 文件?
我会说正确的方法类似于我的 kv 文件。因为您正在拆分可以在单个页面上完成的事情,如果您需要不同的页面,请使用 ScreenManager进口东西
main.py :

`
import kivy
from kivy.app import App
from kivy.uix.widgets import Widget
from kivy.uix.label import Label
from kivy.uix.gridlayut import GridLayout

class MyGrid(Widget):
pass


class MyApp(App):
def build(self):

# this calls what we want to show in the kv file
return MyGrid()



if __name__ == "__main__":
MyApp().run()
`
文件是这样写的,因为应用程序脱落,为了链接 2,它必须具有相同的名称
my.kv :
# "<>"基本上是链接 MyGrid从 .py 文件,然后显示
# gridlayout 等

网格布局:
行数:2
        Label:
text: "whatever"

Label:
text: "whatever 2"


关于python-3.x - 如何在 kivy 中正确导入自定义小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53736868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com