我正在尝试创建一个具有我展示图片的表单的应用。我在调用函数时试图更改这些图片,但是一旦表单加载并且我想让循环正常工作,我就不知道如何调用它。
.py文件:
class TerceiroScreen(Screen):
def __init__(self, **kwargs):
self.name = 'tres'
super(Screen,self).__init__(**kwargs)
i = 0
v.append('1.jpg')
v.append('2.jpg')
v.append('3.jpg')
def fc1(self):
global i, j
for i in range(len(v)):
if i <= len(v):
self.ids.image2.source = v[i]
i = i + 1
time.sleep(1)
else:
i = 0
self.ids.image2.source = v[i]
和我的.kv:
<TerceiroScreen>:
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'logo.jpg'
StackLayout:
orientation: 'tb-lr'
Image:
source: '0.jpg'
size_hint:(.4,.4)
id: image2
GridLayout:
cols: 1
size_hint: (.1,.1)
Button:
text: 'function'
font_size: '15dp'
on_press: root.fc1()
我希望我很清楚,谢谢。
答案 0 :(得分:0)
首先:不要以这种方式使用全局变量,因为这是无稽之谈。您在i
中定义__init__
,然后在for
中再次定义,这使得global i
绝对不必要。我没有在任何地方看到j
,因此,这是严重截断的片段,或者是global
的其他不必要的使用。如果您想访问课程内部,请使用self.i
,因为您的函数已经self
,我认为该函数仅在您的问题/代码中未对齐。
第二:作为kv
中的顶层,始终存在rule
/ class
/ root小部件(即使用文档编写,也不是真正稳定的名称,呵呵)。作为顶层我的意思是:
<Rule>:
Button:
<AnotherRule>:
...
基本上是python类,即你的Screen
,这是一个好的开始,但StackLayout
已经在python class.add_widget()
中使用了。并且您没有StackLayout
以上的任何内容,因此我认为这是一个问题,因为这一行:on_press: root.fc1()
。这句话是“查看规则,这是python类并调用它的函数fc1
。没有规则,没有root.something
在你的方式,因为即使它工作(没有测试它),它只会调用不存在的StackLayout.fc1()
。
最后:正如我所看到的,它可能只是未对齐的代码。如果没有,你也可以回答如何正确使用kivy。
class TerceiroScreen(Screen):
def __init__(self, **kwargs):
...
def fc1(self):
...
<TerceiroScreen>:
canvas.before:
StackLayout:
GridLayout:
Button:
on_press: root.fc1()