【发布时间】:2018-12-30 05:47:37
【问题描述】:
这是部分代码:
class VectorPatternGrid(GridLayout):
temp_list = []
input_count = 0
def check_coord(self, pointList):
VectorPatternGrid.input_count += 1
if len(VectorPatternGrid.temp_list) >= 2:
vecArr.assignVector(CustomVector(VectorPatternGrid.temp_list[0], VectorPatternGrid.temp_list[1]))
for i in range(0, len(VectorPatternGrid.temp_list)):
del VectorPatternGrid.temp_list[0]
# Problem occurs here
for j in range(1, 10):
self.ids['pat' + str(j)].pressed = False
self.ids['pat' + str(j)].source = './dot3.png'
else:
VectorPatternGrid.temp_list.append(pointList)
确实是kv文件。
在您阅读之前,我真的很抱歉这段代码的可读性差。
#: kivy 1.10.0
<VectorPattern>:
pressed: self.pressed
coord: self.coord
source: self.source
<ProgramScreenManager>:
VectorConfigScreen:
id: config
VectorAuthScreen:
id: auth
<VectorConfigScreen>:
BoxLayout:
id: box
orientation: 'vertical'
Label:
text: "Please set your secret vector pattern."
font_size: 20
size_hint: 1, .2
GridLayout:
id: grid
cols: 3
VectorPattern:
id: pat1
coord: [-1,1]
VectorPattern:
id: pat2
coord: [-1,0]
VectorPattern:
id: pat3
coord: [-1,-1]
VectorPattern:
id: pat4
coord: [0,1]
VectorPattern:
id: pat5
coord: [0,0]
VectorPattern:
id: pat6
coord: [0,-1]
VectorPattern:
id: pat7
coord: [1,1]
VectorPattern:
id: pat8
coord: [1,0]
VectorPattern:
id: pat9
coord: [1,-1]
Button:
id: ConfignextBtn
text: 'next'
size_hint: 1, .1
on_press: self.parent.ids.grid.validate_input_count()
<VectorAuthScreen>:
BoxLayout:
id: box
orientation: 'vertical'
Label:
text: "Please input your vector pattern."
size_hint: 1, .2
GridLayout:
id: grid
cols: 3
VectorPattern:
id: pat1
coord: [-1,1]
VectorPattern:
id: pat2
coord: [-1,0]
VectorPattern:
id: pat3
coord: [-1,-1]
VectorPattern:
id: pat4
coord: [0,1]
VectorPattern:
id: pat5
coord: [0,0]
VectorPattern:
id: pat6
coord: [0,-1]
VectorPattern:
id: pat7
coord: [1,1]
VectorPattern:
id: pat8
coord: [1,0]
VectorPattern:
id: pat9
coord: [1,-1]
和回溯:
Traceback (most recent call last):
File "/home/linux/vectorLockScreenProject/experiment/vectorrecognizer.py", line 79, in <module>
VectorRecognizer().run()
File "/usr/lib/python2.7/dist-packages/kivy/app.py", line 828, in run
runTouchApp()
File "/usr/lib/python2.7/dist-packages/kivy/base.py", line 504, in runTouchApp
EventLoop.window.mainloop()
File "/usr/lib/python2.7/dist-packages/kivy/core/window/window_sdl2.py", line 663, in mainloop
self._mainloop()
File "/usr/lib/python2.7/dist-packages/kivy/core/window/window_sdl2.py", line 405, in _mainloop
EventLoop.idle()
File "/usr/lib/python2.7/dist-packages/kivy/base.py", line 342, in idle
self.dispatch_input()
File "/usr/lib/python2.7/dist-packages/kivy/base.py", line 327, in dispatch_input
post_dispatch_input(*pop(0))
File "/usr/lib/python2.7/dist-packages/kivy/base.py", line 233, in post_dispatch_input
listener.dispatch('on_motion', etype, me)
File "kivy/_event.pyx", line 718, in kivy._event.EventDispatcher.dispatch (kivy/_event.c:7726)
File "/usr/lib/python2.7/dist-packages/kivy/core/window/__init__.py", line 1188, in on_motion
self.dispatch('on_touch_down', me)
File "kivy/_event.pyx", line 718, in kivy._event.EventDispatcher.dispatch (kivy/_event.c:7726)
File "/usr/lib/python2.7/dist-packages/kivy/core/window/__init__.py", line 1204, in on_touch_down
if w.dispatch('on_touch_down', touch):
File "kivy/_event.pyx", line 718, in kivy._event.EventDispatcher.dispatch (kivy/_event.c:7726)
File "/usr/lib/python2.7/dist-packages/kivy/uix/screenmanager.py", line 1189, in on_touch_down
return super(ScreenManager, self).on_touch_down(touch)
File "/usr/lib/python2.7/dist-packages/kivy/uix/widget.py", line 457, in on_touch_down
if child.dispatch('on_touch_down', touch):
File "kivy/_event.pyx", line 718, in kivy._event.EventDispatcher.dispatch (kivy/_event.c:7726)
File "/usr/lib/python2.7/dist-packages/kivy/uix/relativelayout.py", line 288, in on_touch_down
ret = super(RelativeLayout, self).on_touch_down(touch)
File "/usr/lib/python2.7/dist-packages/kivy/uix/widget.py", line 457, in on_touch_down
if child.dispatch('on_touch_down', touch):
File "kivy/_event.pyx", line 718, in kivy._event.EventDispatcher.dispatch (kivy/_event.c:7726)
File "/usr/lib/python2.7/dist-packages/kivy/uix/widget.py", line 457, in on_touch_down
if child.dispatch('on_touch_down', touch):
File "kivy/_event.pyx", line 718, in kivy._event.EventDispatcher.dispatch (kivy/_event.c:7726)
File "/usr/lib/python2.7/dist-packages/kivy/uix/widget.py", line 457, in on_touch_down
if child.dispatch('on_touch_down', touch):
File "kivy/_event.pyx", line 718, in kivy._event.EventDispatcher.dispatch (kivy/_event.c:7726)
File "/usr/lib/python2.7/dist-packages/kivy/uix/behaviors/button.py", line 151, in on_touch_down
self.dispatch('on_press')
File "kivy/_event.pyx", line 718, in kivy._event.EventDispatcher.dispatch (kivy/_event.c:7726)
File "/home/linux/vectorLockScreenProject/experiment/vectorrecognizer.py", line 68, in on_press
tempInstance.check_coord(self.coord)
File "/home/linux/vectorLockScreenProject/experiment/vectorrecognizer.py", line 41, in check_coord
self.ids['pat' + str(j)].pressed = False
KeyError: 'pat1'
我自己也想弄清楚,但没有一个成功。
所以,我的问题是:
不能使用 self.ids['(string)'] 访问孩子的属性吗? 如果这样, 有没有更好的解决方案?
还有一个额外的问题:
除了写那些重复的“拍”,还有什么更好的办法吗?
感谢任何cmets。
【问题讨论】:
标签: kivy