我正在尝试在.py文件中声明一个可以在我的.kv文件中使用的变量。我在App类中声明了变量,并在.kv文件中调用了该变量,但出现错误。
这是我的.py
Debug.Print ie.document.querySelector("input[name='points']").getAttribute("value")
这是我的.kv
class SwitchScreenU553(Screen):
pass
presentation = Builder.load_file("kivy.kv")
class MainApp(App):
MY_NUMBER = .8
def build(self):
return presentation
当我尝试使用它时,出现以下错误:
这似乎对其他人有用,但是我显然做错了。
答案 0 :(得分:0)
我会尝试回答您的问题,我不太了解kivy的语言,但我了解python和全局变量,首先在python中,您需要将self设置为属性,所以我认为您应该具备:
class MainApp(App):
self.MY_NUMBER = .8
def build(self):
return presentation
第二步,您需要导入模块”,其中的类“ MainApp”如下:
#from module import MainApp
<SwitchScreenU553>:
name: "switchU553"
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'background.png'
FloatLayout:
ToggleButton:
text: "HB"
color: 1,1,1,1
font_size: app.MY_NUMBER
size_hint: 0.13,0.4
pos_hint: {"center_x":(0.3/8)+.05, "center_y":.8}
这就是我的想法。
答案 1 :(得分:0)
如果在print()
之前和之后,presentation = Builder.load_file("kivy.kv")
之前和MainApp().run()
之前添加return presentation
函数,您会注意到 Builder.load_file() 方法首先执行。那时, app 和 MY_NUMBER 不存在,这导致 AttributeError 。
有两种解决方案,如下所示:
presentation = Builder.load_file("kivy.kv")
移动到build()
方法,即在return presentation
之前,或return presentation
替换为return Builder.load_file("kivy.kv")
,然后删除presentation = Builder.load_file("kivy.kv")
在 kivy.kv 中,没有定义 根窗口小部件 。因此,它将返回 None ,并且不会显示任何窗口。
解决方案是将类规则<SwitchScreenU553>:
替换为根规则SwitchScreenU553:
文本的font_size是一个整数,默认为12。因此,将 MY_NUMBER = 0.8 分配给 font_size 会导致分配了零且没有文本(“ HB”)显示。
解决方案是将 0.8 替换为 8 。
Builder :您可以告诉Kivy直接加载字符串或文件。如果此字符串或文件定义了根窗口小部件,它将由 方法:
Builder.load_file('path/to/file.kv')
或:
Builder.load_string(kv_string
The root rule is declared by declaring the class of your root widget, without any indentation, followed by : and will be set as the root attribute of the App instance:
Widget:
A class rule, declared by the name of a widget class between < > and followed by :, defines how any instance of that class will be graphically represented:
<MyWidget>:
from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.lang import Builder
class SwitchScreenU553(Screen):
pass
class MainApp(App):
MY_NUMBER = 8
def build(self):
return Builder.load_file("kivy.kv")
if __name__ == "__main__":
MainApp().run()
#:kivy 1.10.0
SwitchScreenU553: # root rule
name: "switchU553"
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'background.png'
FloatLayout:
ToggleButton:
text: "HB"
color: 1,1,1,1
font_size: app.MY_NUMBER
size_hint: 0.13,0.4
pos_hint: {"center_x":(0.3/8)+.05, "center_y":.8}