[英]python code for kivy app throws the error: KeyError: ''
我正在尝试运行 kivy 应用程序,但我不断收到 (KeyError: '') 错误,我尝试了不同的方法,但无法正常工作。 ps: dic 是我的本地文件,其中包含: -dic_trans- 和 -full- 作为非常长的字典。
使用计数器变量 x 来增加两个字典的键值索引,例如:
单击第一个按钮(是)时,第一个 label 应接收第一个字典的键,第二个 label 应接收该键的值
同样对于第二个按钮(否),第一个 label 应该接收第二个字典的键,第二个 label 应该接收该键的值
我不确定我错过了哪里,可能是由于使用属性时的一些错误,或者其他原因,我有点困惑,因为我对 kivy 有点陌生。
python 代码如下:
from dic import dic_trans
from dic import full
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import StringProperty
from kivy.properties import NumericProperty
from kivy.properties import DictProperty
class MainBoxLayout (BoxLayout):
label1property = StringProperty()
label2property = StringProperty()
x = NumericProperty(-1)
y = DictProperty(dic_trans)
z = DictProperty(full)
def press_yes(self):
global x
self.x += 1
self.label1property = str(self.y[self.x])
def press_no(self):
self.label2property = str(self.z[self.x])
class BasicWordsPracticeApp(App):
pass
BasicWordsPracticeApp().run()
对于 kv 文件:
MainBoxLayout:
<MainBoxLayout>:
padding:("7dp","7dp","7dp","7dp")
orientation: "vertical"
Label:
text: root.label1property
multiline: True
font_size: 50
background_color: (0,0,1,1)
canvas.before:
Color:
rgba: self.background_color
Rectangle:
size: self.size
pos: self.pos
Label:
text: root.label2property
multiline: True
size_hint: 1,None
height: "450dp"
font_size: 50
background_color: (1,1,0,1)
canvas.before:
Color:
rgba: self.background_color
Rectangle:
size: self.size
pos: self.pos
BoxLayout:
Button:
text: "No"
on_press: root.press_no()
background_color: (255,0,0,1)
Button:
text: "Yes"
on_press: root.press_yes()
background_color: (0,255,0,1)
错误如下:。 . .
[INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil,
img_ffpyplayer
Traceback (most recent call last):
File "hope.py", line 38, in <module>
BasicWordsPracticeApp().run()
File "/", line 949,
in run
self._run_prepare()
File "/", line 918,
in _run_prepare
self.load_kv(filename=self.kv_file)
File "/", line 691,
in load_kv
root = Builder.load_file(rfilename)
File "/",
line 306, in load_file
return self.load_string(data, **kwargs)
File "/",
line 404, in load_string
widget = Factory.get(parser.root.name)(__no_builder=True)
File "kivy/_event.pyx", line 195, in kivy._event.EventDispatcher.__cinit__
File "kivy/properties.pyx", line 1317, in
kivy.properties.ReferenceListProperty.link_deps
File "kivy/properties.pyx", line 465, in kivy.properties.Property.fbind
KeyError: ''
你的问题是你使用了像“x”、“y”、“z”这样的字母,同样的错误也为我复制了。 尝试使用以下内容:
x_num = NumericProperty(-1)
y_dict = DictProperty(dic_trans)
z_dict = DictProperty(full)
我相信 xy 和 z 可能是 kivy 的默认变量。
关于标签:
您可以通过为标签指定 id 以不同的方式控制标签。 您需要提供 label 和 ID,然后在父级中引用它,以便能够在任何父级函数中访问它。 试试这个:
.py
from dic import dic_trans
from dic import full
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import StringProperty
from kivy.properties import NumericProperty
from kivy.properties import DictProperty
class BasicWordsPracticeApp(App):
pass
class MainBoxLayout(BoxLayout):
x_num = NumericProperty(-1)
y_dict = DictProperty(dic_trans)
z_dict = DictProperty(full)
def press_yes(self):
global x
self.x += 1
# accessing the .text variable of the label id label_1
self.label_1.text = str(self.y[self.x])
def press_no(self):
# accessing the .text variable of the label id label_2
self.label_2.text = str(self.z[self.x])
BasicWordsPracticeApp().run()
.kv
MainBoxLayout:
<MainBoxLayout>
label_1: label_1
label_2: label_2
padding:("7dp","7dp","7dp","7dp")
orientation: "vertical"
Label:
id: label_1
text: "some default value"
multiline: True
font_size: 50
background_color: (0,0,1,1)
canvas.before:
Color:
rgba: self.background_color
Rectangle:
size: self.size
pos: self.pos
Label:
id: label_2
text: "some default value"
multiline: True
size_hint: 1,None
height: "450dp"
font_size: 50
background_color: (1,1,0,1)
canvas.before:
Color:
rgba: self.background_color
Rectangle:
size: self.size
pos: self.pos
BoxLayout:
Button:
text: "No"
on_press: root.press_no()
background_color: (255,0,0,1)
Button:
text: "Yes"
on_press: root.press_yes()
background_color: (0,255,0,1)
@Jonathan:更改名称似乎有助于继续下一步,正在打开 kivy 应用程序,但是当单击任一按钮时,我收到一个 keyError 0 用于单击一个按钮,而 keyError 为 -1 用于单击其他按钮。 请注意,我也尝试过另一种方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.