我有一个由其他小部件(W1)制成的小部件(W2)。每个都有一个对应的.kv文件,如下所示。运行main.py,我希望看到带有两个垂直堆叠标签的黑色背景。相反,我使两个标签相互重叠,所以出了点问题。
kivy.factory.FactoryException: Unknown class <W1>
所以我想,“也许我应该将w1.py导入w2.py中,即使未在py文件中显式使用它?这种工作方式……我将两个标签都放在另一个顶部,例如下图。
我在做什么错?编写预期将由另一个小部件导入/包含的小部件的正确方法是什么?以及正确的导入方式?
我尝试在.py文件中使用Builder.load_file()
,只是导入.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类中可能缺少最小的height / width属性。
我仍然不确定导入具有成对的.kv文件的窗口小部件的“正确”方法是什么,还是我从窗口小部件继承继承重叠窗口小部件的确切原因;只是猜测。
答案 0 :(得分:0)
为什么要为此使用两个不同的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()
`
my.kv :
#“ <>”基本上从.py文件链接MyGrid
,然后显示
#gridlayout等
网格布局:
行:2
Label:
text: "whatever"
Label:
text: "whatever 2"