使用 Kivy 加载表单后如何调用函数?



我正在尝试制作一个具有显示图片的表单的应用程序。当我调用函数时,我正在尝试更改此图片,但我不知道一旦加载表单并且我想让我的循环正常工作,我该如何调用它。

.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()

我希望我已经说清楚了,谢谢。

首先:不要以这种方式使用全局变量,因为它是无稽之谈。你在__init__中定义i,然后在for中再次定义它,这使得global i绝对没有必要。我在任何地方都看不到j,所以要么这是严重截断的片段,要么是另一种不必要的global使用.如果您想在类中访问它,请使用self.i,因为您的函数已经self,我认为该函数仅在您的问题/代码中未对齐。

第二:作为kv的顶层,总有一个rule/class/root小部件(即使写在文档中也不是真正稳定的名字,呵呵)。作为顶层,我的意思是:

<Rule>:
Button:
<AnotherRule>:
...

基本上是 Python 类,即您的Screen,这是一个很好的开始,但StackLayout已经在 Pythonclass.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()

最新更新