Python 当kivy上发生事件时,如何增加计数器
我想生成一个计数,如果某个事件发生而我没有得到它,它会将计数器加1。其思想是,当将其中一个正确的图像(Dropable_zone_Object:[to_box,])拖放到正确的位置时,计数器应添加+1。目前,该应用程序工作正常,但在打印计数器时,其值始终为1。我应该换什么 Arrastar.kvPython 当kivy上发生事件时,如何增加计数器,python,kivy,counter,Python,Kivy,Counter,我想生成一个计数,如果某个事件发生而我没有得到它,它会将计数器加1。其思想是,当将其中一个正确的图像(Dropable_zone_Object:[to_box,])拖放到正确的位置时,计数器应添加+1。目前,该应用程序工作正常,但在打印计数器时,其值始终为1。我应该换什么 Arrastar.kv #:kivy 1.9.0 <Relaciona3x2>: canvas.before: Rectangle: pos: self.pos
#:kivy 1.9.0
<Relaciona3x2>:
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/fondobosque.jpg'
BoxLayout:
orientation: 'vertical'
BoxLayout:
id: from_box
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_i/iglu.png'
bound_zone_objects: [from_box, to_box ]
droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_i/indio.png'
bound_zone_objects: [from_box, to_box, ]
droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_m/moto.png'
bound_zone_objects: [from_box, to_box, ]
#droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
BoxLayout:
id: from_box
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_u/una.png'
bound_zone_objects: [from_box, to_box, ]
#droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_i/iman_1.png'
bound_zone_objects: [from_box, to_box, ]
droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_u/urraca.png'
bound_zone_objects: [from_box, to_box, ]
#droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
Image:
id: to_box
source: "data/img/caldero.png"
<Relaciona4x2>:
AnchorLayout:
Image:
source: "data/img/fondobosque.jpg"
allow_stretch: True
keep_ratio: False
<Relaciona5x2>:
AnchorLayout:
Image:
source: "data/img/fondobosque.jpg"
allow_stretch: True
keep_ratio: False
#:kivy 1.9.0
#:import FadeTransition kivy.uix.screenmanager.FadeTransition
<RelScreenManager>:
transition: FadeTransition()
Relaciona3x2:
Relaciona4x2:
Relaciona5x2:
<Relaciona3x2>:
name: 'Rel3x2'
id: Rel3x2
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/fondobosque.jpg'
BoxLayout:
orientation: 'vertical'
BoxLayout:
id: from_box
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_i/iglu.png'
bound_zone_objects: [from_box, to_box ]
droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_i/indio.png'
bound_zone_objects: [from_box, to_box, ]
droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_m/moto.png'
bound_zone_objects: [from_box, to_box, ]
#droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
BoxLayout:
id: from_box
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_u/una.png'
bound_zone_objects: [from_box, to_box, ]
#droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_i/iman_1.png'
bound_zone_objects: [from_box, to_box, ]
droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_u/urraca.png'
bound_zone_objects: [from_box, to_box, ]
#droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
Image:
id: to_box
source: "data/img/caldero.png"
<Relaciona4x2>:
name: 'Rel4x2'
id: Rel4x2
AnchorLayout:
Image:
source: "data/img/fondobosque.jpg"
allow_stretch: True
keep_ratio: False
<Relaciona5x2>:
name: 'Rel5x2'
id: Rel5x2
AnchorLayout:
Image:
source: "data/img/fondobosque.jpg"
allow_stretch: True
keep_ratio: False
在每次调用
greet()
时,都会创建一个新的Contador
实例。您可能应该只创建一个Contador
实例,如下所示:
class ArrastraApp(App):
def build(self):
#Window.fullscreen = 'auto'
self.cuenta = Contador()
return Relaciona3x2()
def greet(self):
# cuenta = Contador()
print('Draggin done!')
if DragableButton.droppable_zone_objects is True:
print(self.cuenta.next())
谢谢John,计数器已经做了正确的求和,但是现在当我尝试在计数器达到3时转到下一个屏幕时,它什么也不做
class ArrastraApp(App):
def build(self):
#Window.fullscreen = 'auto'
self.cuenta = Contador()
return Relaciona3x2()
if self.cuenta == 3:
return Relaciona4x2()
def greet(self):
#cuenta = Contador()
print('Draggin done!')
print(self.cuenta.next())
我还是无法进入下一个屏幕,约翰。我已经在ScreenManager中设置了计数器和If,但是我仍然无法从一个页面转到另一个页面,关于ScreenManager的操作有些我不知道 Arrastar.kv
#:kivy 1.9.0
<Relaciona3x2>:
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/fondobosque.jpg'
BoxLayout:
orientation: 'vertical'
BoxLayout:
id: from_box
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_i/iglu.png'
bound_zone_objects: [from_box, to_box ]
droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_i/indio.png'
bound_zone_objects: [from_box, to_box, ]
droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_m/moto.png'
bound_zone_objects: [from_box, to_box, ]
#droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
BoxLayout:
id: from_box
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_u/una.png'
bound_zone_objects: [from_box, to_box, ]
#droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_i/iman_1.png'
bound_zone_objects: [from_box, to_box, ]
droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_u/urraca.png'
bound_zone_objects: [from_box, to_box, ]
#droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
Image:
id: to_box
source: "data/img/caldero.png"
<Relaciona4x2>:
AnchorLayout:
Image:
source: "data/img/fondobosque.jpg"
allow_stretch: True
keep_ratio: False
<Relaciona5x2>:
AnchorLayout:
Image:
source: "data/img/fondobosque.jpg"
allow_stretch: True
keep_ratio: False
#:kivy 1.9.0
#:import FadeTransition kivy.uix.screenmanager.FadeTransition
<RelScreenManager>:
transition: FadeTransition()
Relaciona3x2:
Relaciona4x2:
Relaciona5x2:
<Relaciona3x2>:
name: 'Rel3x2'
id: Rel3x2
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/fondobosque.jpg'
BoxLayout:
orientation: 'vertical'
BoxLayout:
id: from_box
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_i/iglu.png'
bound_zone_objects: [from_box, to_box ]
droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_i/indio.png'
bound_zone_objects: [from_box, to_box, ]
droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_m/moto.png'
bound_zone_objects: [from_box, to_box, ]
#droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
BoxLayout:
id: from_box
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_u/una.png'
bound_zone_objects: [from_box, to_box, ]
#droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_i/iman_1.png'
bound_zone_objects: [from_box, to_box, ]
droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
DragableButton:
canvas:
Rectangle:
pos: self.pos
size: self.size
source: 'data/img/letra_u/urraca.png'
bound_zone_objects: [from_box, to_box, ]
#droppable_zone_objects: [to_box, ]
drop_func: app.greet
Widget:
Image:
id: to_box
source: "data/img/caldero.png"
<Relaciona4x2>:
name: 'Rel4x2'
id: Rel4x2
AnchorLayout:
Image:
source: "data/img/fondobosque.jpg"
allow_stretch: True
keep_ratio: False
<Relaciona5x2>:
name: 'Rel5x2'
id: Rel5x2
AnchorLayout:
Image:
source: "data/img/fondobosque.jpg"
allow_stretch: True
keep_ratio: False
self.cuenta
永远不会等于3,因为self.cuenta
不是数字,而是Contador
类的实例。也许你应该将self.cuenta.numero与3进行比较。你说的没错,但现在的问题是我不知道如何调用下一个屏幕。我试着这样做:if self.cuenta.numero==3:return Ralaciona4x2()
它什么也不做,但是如果在if
中我放了一个print(self.cuenta.numero)
它会打印我帐户的结果,用它,If
做得很好,但是对下一个屏幕的调用没有完成。只是在您将If
语句放在哪里时才实现。在任何方法中,返回后出现的任何代码都将永远不会执行。所以你的比较永远不会被执行。另外,当run()
方法启动App
的build()
方法时,只调用一次。由于您使用的是屏幕
,您可能应该使用屏幕管理器
并根据您的比较切换屏幕
。